《2022年单链表的基本操作 .pdf》由会员分享,可在线阅读,更多相关《2022年单链表的基本操作 .pdf(5页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、#include#include typedef int ElemType;/*定义 ElemType 为 int 类型*/#define TRUE 1#define FALSE 0#define flag-1/*单链表的结点类型*/typedef struct LNode ElemType data;struct LNode*next;LNode,*LinkList;/LNode是此结构体的类型名,而LInkList 是结构体指针的类型名LinkList LinkListInit()/*建立一个单链表*/LinkList L;L=(LinkList)malloc(sizeof(LNode);
2、L-next=NULL;return L;void LinkListClear(LinkList L)/*清空单链表*/L-next=NULL;int LinkListEmpty(LinkList L)/*检查单链表是否为空*/if(L-next=NULL)return TRUE;else return FALSE;void LinkListTraverse(LinkList L)/*遍历单链表*/LinkList p;/遍历是将顺序表中的元素都调用一次。p=L-next;while(p!=NULL)printf(%d,p-data);p=p-next;printf(n);名师资料总结-精品资
3、料欢迎下载-名师精心整理-第 1 页,共 5 页 -int LinkListLength(LinkList L)/*求链表长度*/LinkList p;int j;p=L-next;j=0;while(p!=NULL)j+;p=p-next;return j;LinkList LinkListGet(LinkList L,int i)/*插入数据在结尾插入*/LinkList p;int j;p=L-next;j=1;while(p!=NULL&jnext;j+;if(j=i)return p;else return NULL;LinkList LinkListLocate(LinkList
4、L,ElemType x)/*查找数据*/LinkList p;/p是指针p=L-next;while(p!=NULL&p-data!=x)p=p-next;return p;void LinkListInsert(LinkList L,int i,ElemType x)/在链表中第i 个位置插入元素 LinkList pre,p,s;名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 5 页 -int j;pre=L;j=1;p=L-next;while(pre&jnext;j+;if(pre=NULL)printf(给的 i 值超过了表长);exit(0);s=(LNode*)m
5、alloc(sizeof(LNode);s-data=x;pre-next=s;s-next=p;void LinkListDel(LinkList L,ElemType x)/*删除节点*/LinkList pre,p;int j;pre=L;j=1;p=L-next;while(p&p-data!=x)pre=p;p=p-next;j+;if(p=NULL)printf(表中没有值为x 的结点);exit(0);pre-next=p-next;free(p);LinkList LinkListCreat()/*初始化单链表*/名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 5
6、 页 -LinkList L=LinkListInit(),p,r;ElemType x;r=L;printf(请输入数据以-1 为结束:n);scanf(%d,&x);while(x!=flag)p=(LinkList)malloc(sizeof(LNode);p-data=x;r-next=p;r=p;scanf(%d,&x);r-next=NULL;return L;int main()int quit=0;int i;ElemType e;LinkList L;while(!quit)int d;printf(请选择您的操作:n);printf(1.建立链表 n2.清空链表 n3.求链
7、表长 n4.检查链表是否为空n);printf(5.遍历链表 n6.查找元素 n);printf(7.查找元素在表中的位置n);printf(8.插入元素 n9.删除元素 n10.初始化单链表 n);printf(其他键退出。n);scanf(%d,&d);switch(d)case 1:L=LinkListInit();break;case 2:LinkListClear(L);break;case 3:printf(链表长度为:%dn,LinkListLength(L);名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 5 页 -break;case 4:if(LinkList
8、Empty(L)printf(此链表是空表 n);else printf(此链表不是空表n);break;case 5:LinkListTraverse(L);break;case 6:printf(请输入查找的位置:n);scanf(%d,&i);printf(位置是:%dn,LinkListGet(L,i);break;case 7:printf(请输入数值:n);scanf(%d,&e);printf(位置是:%dn,LinkListLocate(L,e);break;case 8:printf(请输入插入的位置和值:n);scanf(%d%d,&i,&e);LinkListInsert(L,i,e);break;case 9:printf(请输入删除的数值:n);scanf(%d,&e);LinkListDel(L,e);break;case 10:L=LinkListCreat();break;default:quit=1;return 0;名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 5 页 -