单链表基本操作实验

上传人:pu****.1 文档编号:472812121 上传时间:2023-03-20 格式:DOCX 页数:20 大小:21.30KB
返回 下载 相关 举报
单链表基本操作实验_第1页
第1页 / 共20页
单链表基本操作实验_第2页
第2页 / 共20页
单链表基本操作实验_第3页
第3页 / 共20页
单链表基本操作实验_第4页
第4页 / 共20页
单链表基本操作实验_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《单链表基本操作实验》由会员分享,可在线阅读,更多相关《单链表基本操作实验(20页珍藏版)》请在金锄头文库上搜索。

1、单链表基本操作实验实验2链表的操作实验内容:1)基础题:编写链表基本操作函数,链表带有头结点(1) CreatList_h()/用头插法建立链表(2) CreateList_t()用尾插法建立链表(3) InsertList ()向链表的指定位置插入元素(4) DeleteList ()删除链表中指定元素值(5) FindList()查找链表中的元素(6) OutputList ()输出链表中元素2)提高题:(1)将一个头节点指针为heada的单链表A 分解成两个单链表A和B,其头结点指针分别为 heada和headb,使得A表中含有原单链表 A中 序号为奇数的元素,B表中含有原链表A中序号

2、为偶数的元素,且保持原来的相对顺序。(2)将一个单链表就地逆置。即原表(a1, a2, 。 an),逆置后新表(an,an-1jOOOOOOOa1)/*程序功能:单链表基本功能操作 编程者:杨天啸日期 :2016-04-14版本号:3.0*/#include #include typedef struct Listint data;struct List *next;List;头插法void CreatList_h(List *L) / int i = 0;int n = 0;int goal;List *p;printf(请输入数据的个数:n);scanf(%d,&n);L - next =

3、 NULL;for(i=0;i data = goal;p - next = L-next; / 将 L 指向的 地址赋值给p;L - next = p;void CreateList_t(List *L) / 尾插法int i;int n;int goal;List *p;List *q=L;printf(请输入数据的个数:n);scanf(%d,&n);for (i=0;i data = goal;q - next = p;q = p;q - next = NULL;void InsList(List *L,int i,int e) /插入List *s;List *p = L;int j

4、 = 0;while (p&jnext;+j;s = (struct List*)malloc(sizeof(struct List);s - data = e;/插入L中s - next = p - next;p - next = s;return ;void DeleteList(List*L,int e) /删除List *q;List *p = L;while (p-next&p-next-data!=e)p = p - next;if (!(p-next)printf(不存在该元素!n);exit(0);q = p - next;p - next = q-next;e = q - d

5、ata;free(q);return ;查找元素void FindList(List*L,int e) / intj = 1;List *p = L-next;while (p&p-data!=e)p = p-next;+j;if (!p)printf(不存在t元素!n);exit(0);printf(您查找的元素位置为:dn,j);return ;void DisPlay(List *L)/输出链表List *p = L-next;printf(您输入的数据为:n);while (p!=NULL)printf (%d ,p-data);p = p - next;printf(n);void

6、Inverse(List*L) /单链表就地逆置List *q;List *p = L-next;L - next = NULL;while (p != NULL)q = p - next; /q指针保留原链表当前处理节点的下一个节点p - next = L - next; /将当 前处理节点p插入到逆置L的表头L - next = p;p = q; /p指向下一个待插入的节点void DisCreat(List*L) / 链表拆分 inti=0;/i记录表A中结点的序号List *p;List*B=(structList*)malloc(sizeof(struct List); /仓1J建B

7、表表头B - next = NULL;/B表初始化List*ra= L,*rb = B;/ra和rb将分别指向将创建的A表和B表的尾 结点p= L - next;/p指向待处理的结点L- next = NULL;/置空新的A表while (p != NULL)处理序号为偶若B表尾指向新的处理原序号为奇在A表尾插/ 将p指向i+;/序号加1if (i%2 = 0)/数的链表结点rb - next = p; /描入新结点rb = p; /rb尾结点else/数的结点ra - next = p; /入新结点ra = p;p = p-next;新的待处理结点ra - next = NULL;rb -

8、next = NULL;p = L - next;printf(奇数位数据为:n);/输出奇数位数据while (p != NULL)printf (%d ,p - data);p = p - next;printf(n);List *q = B-next;printf(偶数位数据为:n);/ 输出偶数位数据while(q != NULL)printf (%d ”,q-data);q = q - next;printf(n);return ;int main()int n;int i;int e;int No;List*L=(structList*)malloc(sizeof(struct L

9、ist);List*B=(structList*)malloc(sizeof(struct List);char yes_no = y;while(yes_no=y|yes_no=Y)/循坏开始system(cls);printf(ttt|n);/交互式界面printf(ttt|单链表基本操作|n);printf(ttt|n);printf(ttt 表|n);printf(ttt 表|n);printf(ttt |n);printf(ttt|n);printf(ttt|n);printf(ttt|n);printf(ttt 置 |n); printf(ttt |n); printf(ttt |

10、n); printf(ttt1 -2-3-4567头插法建立链尾差法建立链指定位置插入指定元素删除查找链表元素输出链表元素单链表就地逆8单链表拆分0-退出|n);printf(ttt|计科14-2第5组八州n);printf(ttt|n);printf(请选择运算方式:n);scanf (%d,&No);switch(No)case 1:CreatList_h(L);DisPlay(L);break;case 2:CreateList_t(L);DisPlay(L);break;case 3:printf( 请输入需要插入元素的位 置:n);scanf(%d,&i);printf(请输入需要插

11、入的元素:n);scanf(%d,&e);InsList(L,i,e);DisPlay(L);break;case 4:printf(请输入需要删除的元素:n);scanf(%d,&e);DeleteList(L,e);DisPlay(L);break;case 5:printf(请输入需要查找的元素:n);scanf(%d,&e);FindList(L,e);DisPlay(L);break;case 6:DisPlay(L); break;case 7:Inverse(L);DisPlay(L); break;case 8:DisCreat(L); break;case 0:system(cls);尚有很多不足之printf(nnnttt处,望多多指教!”);exit(0);break;default:printf(” 请输入正确的数字。nn);/错误提醒printf(nntt 是否继续操作(输入Y或 y继续,其它字符退出)? n); / 循环选 择getchar();scanf(%c”,&yes_no);return 0;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 营销创新

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号