单链表顺序存储相关操作的c语言实现
来源:互联网 发布:淮南网络宾馆 编辑:程序博客网 时间:2024/05/28 16:04
以前学数据结构时,对于单链表的顺序存储的原理都懂,但是从没有好好地编程实现一下,现在呢,重温数据结构,然后实现了一下.下面是源代码.实现了初始化,创建,查找,删除,定位还有两个链表的合并.
#include<stdio.h>#define MAXSIZE 20#define OK 1#define ERROR 0#define FALSE 0typedef int ElemType;typedef int Status;typedef struct//定义顺序存储链表的结构体{ ElemType data[MAXSIZE]; int length;} SqList;/******初始化链表*/void InitSqList(SqList *sq){ sq->length=0;}/*************创建包含有n个元素的链表*/void CreatSqList(SqList *sq,int n){ int i; for(i=0; i<n; i++) { sq->data[i]=i+3;//存储的数据从3开始主要是为了后面和另外一个链表合并 } sq->length=n;}void CreatSqList2(SqList *sq,int n){ int i; for(i=0; i<n; i++) { sq->data[i]=i+1; } sq->length=n;}/*******输出链表*/void printSqList(SqList *sq){ int i; for(i=0; i<sq->length; i++) { printf("%d ",sq->data[i]); } printf("\n");}/****获取第i个位置的元素,赋值给e,成功返回ok*/Status GetElem(SqList *L,int i,ElemType *e){ if(i<1 || i>L->length || 0==L->length)//判断位置的合理性 { return ERROR; } *e=L->data[i-1]; return OK;}/********链表在第i个位置插入元素e*/Status SqListInstert(SqList *L,int i,ElemType e){ int k; if(L->length==MAXSIZE)//判断是否已满 { return ERROR; } if(i<1 || i>L->length+1)//判断插入位置是否合理 { return ERROR; } if(i<=L->length)//如是不是最后一个位置,则插入位置后面的元素全部后移,否则直接插入 { for(k=L->length-1; k>=i-1; k--) { L->data[k+1]=L->data[k]; } } L->data[i-1]=e;//赋值 L->length++;//长度加1 return OK;}/**************删除第i个位置的元素,返回所删除位置的值**/Status SqListDelete(SqList *sq,int i,ElemType *e){ int k; if(i<1 || i>sq->length)//判断删除位置是否合理 { return ERROR; } *e=sq->data[i-1]; if(i<sq->length) { for(k=i-1; k<sq->length-1; k++) //被删除元素的后面的元素全部后移 { sq->data[k]=sq->data[k+1]; } } sq->length--;//长度减1 return OK;}/***********判断元素是否在链表中*/Status Location(SqList *la,int e){ int i; for(i=0; i<la->length; i++) { if(e==la->data[i]) return OK; } if(i==la->length) { return ERROR; }}void UnionL(SqList *la,SqList *lb)//求la与lb的并集,把结果保存到la中{ int la_len,lb_len;//定义链表a,b的长度 int i; ElemType e; la_len=la->length; lb_len=lb->length; for(i=1; i<=lb_len; i++) { if(!GetElem(lb,i,&e)) { printf("getelem fail!\n"); } if(!Location(la,e)) { SqListInstert(la,++la_len,e); } }}int main(){ SqList la,lb; int result;//保存被删除元素的值 int elem;//保存第i个位置的值 int n=10; int m=5; InitSqList(&la);//初始化第一个链表la CreatSqList(&la,n);//创建第一个链表la printf("the first link was created successly!\nThe first link is:\n"); printSqList(&la); SqListInstert(&la,5,50);//插入 printSqList(&la);//输出 SqListDelete(&la,5,&result);//删除 printf("%d\n",result); printSqList(&la); printf("Get the third elem\n"); GetElem(&la,3,&elem); printf("%d\n",elem); InitSqList(&lb); CreatSqList2(&lb,m); printf("The second list is:\n"); printSqList(&lb); UnionL(&la,&lb); printf("The union list of first and second list is:\n"); printSqList(&la); return 0;}
运行结果如图:
1 0
- 单链表顺序存储相关操作的c语言实现
- C语言:静态顺序表的实现和相关操作
- 线性表的顺序存储实现及相关操作 C语言版
- 线性表的顺序存储实现及相关操作 C语言版
- C语言实现线性表之顺序存储结构操作
- 线性表的顺序存储结构的常见操作(C语言代码实现)
- C语言实现二叉排序树的相关操作
- 数据结构单链表的相关操作(linux下实现)C语言
- C语言实现单链表相关操作
- 线性表的顺序存储结构的c语言实现
- C语言--线性表的顺序存储的实现
- (C语言版)栈和队列(二)——实现顺序存储栈和顺序存储队列的相关操作
- (C语言版)栈和队列(二)——实现顺序存储栈和顺序存储队列的相关操作
- c语言静态顺序表的相关功能实现
- 顺序存储结构线性表的C语言实现
- 用C语言实现线性表的顺序存储结构
- 串的定长顺序存储C语言实现
- 栈的c语言实现(顺序存储)。。。2014.5.9
- 安卓控件使用系列2:TextView实现图文(图片和文字)混排
- 【bzoj4292】 [PA2015]Równanie 乱搞
- 图片爬虫程序 JAVA
- 2015弱校联盟(1) -A. Easy Math
- 黑马程序员-----IO流
- 单链表顺序存储相关操作的c语言实现
- Android:动画效果translate、scale、alpha、rotate详解
- springmvc整合mybatis出现Could not autowire field:No matching bean of type错误
- JAVA实现旋转数组的最小数字问题(《剑指offer》)
- CSS列表
- Windows7 平台下Python+NLTK环境搭建
- Codeforces 492D Vanya and Computer Game
- ROS-机器人操作系统(ROS)浅析----第二章
- 关于system()实现中阻塞sigchld信号的问题(转帖) http://blog.chinaunix.net/uid-17044717-id-2835670.html