#include <stdio.h>
#include <stdlib.h> //提供malloc()原型
/*
线性表需要的方法:
1、 List MakeEmpty():初始化一个空线性表
2、 EementType FindKey(int K, List L):根据位序K,返回相应元素
3、 int Find(ElementType X,List L): 在线性表L中查找X的第一次出现位置
4、 void Insert(ElementType X,int i,List L): 在位序i前插入一个新元素X
5、 void Delete(int i , List L): 删除指定位序i的元素
6、 int Length(List L):返回线性表L的长度n
*/
#define MAXSIZE 20
//define 预处理器指令,定义常量 typedef struct LNode *List;
typedef int ElementType;
//定义数据结构的自定义名称 struct LNode{
ElementType Data[MAXSIZE];//定义一个数组
int Last; //数组中最后一个元素位置
}; struct LNode L; //声明一个struct LNode 型的变量L
List PtrL;//声明一个struct LNode * 型的指针变量PtrL //-> 间接运算符,与一个指向结构或联合的指针一起使用,标识该结构或联合的一个成员
//访问下标为i的元素方法 L.Data[i] 或者 PtrL->Data[i] List MakeEmpty()
/*初始化,建立空的顺序表*/
{
List PtrL;
PtrL = (List )malloc(sizeof(struct LNode)); //使用malloc()为结构分配足够的内存空间,并设置PtrL指向该位置
if(NULL == PtrL)
//malloc()是否成功请求到内存
{
printf("内存分配失败!");
exit(EXIT_FAILURE); //EXIT_FAILURE的值也被定义在stdlib.h中。标准提供了两个返回值以保证在所有操作系统中都能正常工作:EXIT_SUCCESS(或者,相当于 0)表示普通的程序结束, EXIT_FAILURE 表示程序异常中止。
}
PtrL->Last = -;
return PtrL; //返回结构指针
} int Find(ElementType X, List PtrL)
/*查找*/
{
int i = ; //声明并初始化变量i
while (i <= PtrL->Last && PtrL->Data[i]!=X) //i 小于等于数组元素数量并且数组i位置的元素与X不相等
{
i++;//i递增1
}
if(i > PtrL->Last)//如果i大于了数组元素的数量
{
return -; //未找到
}
else
{
return i;//否则返回i
}
} void Insert(ElementType X, int i, List PtrL)
/*插入*/
{
int j;//声明变量j
if (PtrL->Last == MAXSIZE-)
{
printf("表空间已满!");
return;
}
if (i < || i > PtrL->Last+)
{
printf("非法位置");
return;
}
for (j=PtrL->Last;j>=i-;j--)//j初始化为数组元素长度,如果j大于等于i-1,
{
PtrL->Data[j+] = PtrL->Data[j]; //将数组 j 位置的元素位置向后移动一位
}
PtrL->Data[i-]=X; //在i-1的位置插入X
PtrL->Last++; //Last指向最后元素
return;
} void Delete(int i,List PtrL)
/*删除*/
{
int j;
if(i < || i > PtrL->Last+)
{
printf("%d元素不存在",i);
return;
}
for (j = i; i<= PtrL->Last;j++)
{
PtrL->Data[j-] = PtrL->Data[j]; //将i位置的元素移动到i-1的位置
}
PtrL->Last--; //Last指向最后元素
return;
} int main(int argc,char const *argv[])
{
MakeEmpty();//初始化
int n = ;
int i = ;
int get_find; for (;i<=n;i++)
{
Insert(i,i,&L); //插入元素
} for (i=;i<n;i++)
{
printf("%d",L.Data[i]); //打印插入的元素
} printf("\n"); get_find=Find(,&L);//查找5的位置
printf("%d",get_find);//打印查找的位置 printf("\n"); Delete(,&L);//删除元素5 for (i=;i<n-;i++)
{
printf("%d",L.Data[i]); //打印插入的元素
} return ; }

C语言实现线性表的更多相关文章

  1. 使用C语言实现线性表

    线性表是最常用且最简单的一种数据结构.一个线性表是n个数据元素的有限序列,序列中的每个数据元素,可以是一个数字,可以是一个字符,也可以是复杂的结构体或对象.例如:1,2,3,4,5是一个线性表,A,B ...

  2. 纯C语言实现线性表

    #include <stdio.h> #include <stdlib.h> #define MAXSIZE 100 typedef int ElemType; typedef ...

  3. 学习使用C语言实现线性表

    线性表是最常用且最简单的一种数据结构.一个线性表是n个数据元素的有限序列,序列中的每个数据元素,可以是一个数字,可以是一个字符,也可以是复杂的结 构体或对象.例如:1,2,3,4,5是一个线性表,A, ...

  4. 浅谈c语言的线性表的基本操作———基于严蔚敏的数据结构(c语言版)

    主要讲的是线性表的创建,插入及删除: 0. 线性表的建立,对于这类操作主要是利用了结构体的性质,对于定义的线性表的特性主要有三点:首先 Typedef struct { ElemType   *ele ...

  5. C语言实现线性表(链式存储方式)

    #include <stdio.h> #include <stdlib.h> //提供malloc()原型 typedef struct LNode *List; typede ...

  6. 数据结构算法C语言实现(二)---2.3线性表的链式表示和实现之单链表

    一.简述 [暂无] 二.头文件 #ifndef _2_3_part1_H_ #define _2_3_part1_H_ //2_3_part1.h /** author:zhaoyu email:zh ...

  7. 数据结构算法C语言实现(一)---2.2线性表的顺序表示和实现

    注意: 虽然是用C语言实现,但是考虑到使用了一个C++的特性----引用以简化代码,所以所有的代码均以cpp作为后缀,用g++编译(以后不做说明). g++版本: 一.简述 本节主要讲述线性表的顺序实 ...

  8. 线性表之顺序存储结构(C语言动态数组实现)

    线性表的定义:N个数据元素的有限序列 线性表从存储结构上分为:顺序存储结构(数组)和 链式存储结构(链表) 顺序存储结构:是用一段连续的内存空间存储表中的数据 L=(a1,a2,a3....an) 链 ...

  9. 数据结构-线性表的链式存储相关算法(C语言实现)

    链表的简单介绍 为什么需要线性链表 当然是为了克服顺序表的缺点,在顺序表中,做插入和删除操作时,需要大量的移动元素,导致效率下降. 线性链表的分类 按照链接方式: 按照实现角度: 线性链表的创建和简单 ...

随机推荐

  1. Appium 服务关键字(转)

    来源: https://github.com/appium/appium/blob/master/docs/cn/writing-running-appium/caps.cn.md#appium-服务 ...

  2. java.lang.NoSuchMethodError: org.hibernate.integrator.internal.IntegratorServiceImpl.<init>(Ljava/util/LinkedHashSet;Lorg/hibernate/boot/registry/classloading/spi/ClassLoaderService;)

    需要:4.3及以上的版本才能用StandardServiceRegistryBuilder() hibernate-core-4.3.11.Final.jar version:4.3 ServiceR ...

  3. python print输出到文件

    要将程序的输出送到一个文件中,需要在 print 语句后面使用 >> 指定一个文件,如下所示: principal = # 初始金额 rate = 0.05 # 利率 numyears = ...

  4. Java 输入/输出 反射

    Java  输入/输出   反射 输入输出和反射 一.数据流的基本概念 流一般分为 ( Input Stream ) 和输出流 ( Output Stream ) 两类,但这种划分并不是绝对的.比如一 ...

  5. DAY4-Flask项目

    项目出现的问题: 问题处在import requests.requests库已经安装了啊; 找了半天也不知道具体错误在哪里,根据提示想是不是http.py这个模块与Python内置的同名模块冲突了?所 ...

  6. 使用refind引导多系统

    使用refind引导多系统 官网下载 rEFInd : http://www.rodsbooks.com/refind/getting.html 安装 rEFInd 教程: http://www.ro ...

  7. c++11 委托构造

    c++11 委托构造 #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string> #includ ...

  8. Alpha 冲刺 —— 十分之十

    队名 火箭少男100 组长博客 林燊大哥 作业博客 Alpha 冲鸭鸭鸭鸭鸭鸭鸭鸭鸭鸭! 成员冲刺阶段情况 林燊(组长) 过去两天完成了哪些任务 协调各成员之间的工作 测试整体软件 展示GitHub当 ...

  9. 【BZOJ2813】奇妙的Fibonacci

    Description ​ Fibonacci数列是这样一个数列: F1 = 1, F2 = 1, F3 = 2 . . . Fi = Fi-1 + Fi-2 (当 i >= 3) ​ pty忽 ...

  10. 使用regsrv32.exe绕过应用程序白名单(多种方法)

    0x00 regsvr简介 regsvr32表示Microsoft注册服务.它是Windows的命令行实用工具.虽然regsvr32有时会导致问题出现,但它是Windows系统文件中的一个重要文件.该 ...