#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. [转帖]amzon最新的产品outposts

    2018年12月3日,全球领先的企业软件创新者VMware(NYSE: VMW)发布两款运行于AWS Outposts的全新解决方案预览:VMware Cloud on AWS Outposts与VM ...

  2. Read N Characters Given Read4 II - Call multiple times

    The API: int read4(char *buf) reads 4 characters at a time from a file. The return value is the actu ...

  3. Ubuntu16.04中MySQL之中文不能插入问题

    转自:http://blog.csdn.net/fr555wlj/article/details/55668476 今天下午在学习MySQL时,向表中插入一条数据含有中文,结果报错如下, ERROR ...

  4. React之智能组件和木偶组件

    智能组件 VS 木偶组件 在 React + Redux 结合作为前端框架的时候,提出了一个将组件分为“智能”和“木偶”两种 智能组件:它是数据的所有者,它拥有数据.且拥有操作数据的action,但是 ...

  5. Java中,一切皆是对象!为何数据类型中还分为:基本类型和对象?

    Java中一切皆是对象!这句话没错,因为八种基本类型都有对应的包装类(int的包装类是Integer),包装类自然就是对象了. 基本类型一直都是Java语言的一部分,这主要是基于程序性能的考量, 基本 ...

  6. 【转】ubuntu16.04安装ncurses-devel

    在ubuntu16.04中编译内核时,使用make menuconfig发生错误,说没有安装ncurses-devel. 使用apt install ncurses-devel命令安装该库,没有,然后 ...

  7. 【Learning】矩阵树定理 Matrix-Tree

    矩阵树定理 Matrix Tree ​ 矩阵树定理主要用于图的生成树计数. 看到给出图求生成树的这类问题就大概要往这方面想了. 算法会根据图构造出一个特殊的基尔霍夫矩阵\(A\),接着根据矩阵树定理, ...

  8. Android O新特性和行为变更总结zz

    https://mp.weixin.qq.com/s/Ezfm-Xaz3fzsaSm0TU5LMw Android O 行为变更https://developer.android.google.cn/ ...

  9. java 批量文件后缀重命名

    import java.io.File; public class BatchFileSuffixRename { public static void main(String[] args) { / ...

  10. 解题:USACO15JAN Grass Cownoisseur

    解题 首先缩点没啥可说的,然后考虑枚举这次逆行的边.具体来说在正常的图和反图上各跑一次最长路,然后注意减掉起点的贡献,用拓扑排序实现(我这里瞎写了个Bellman_Ford,其实在DAG上这好像和拓扑 ...