实验2 不带头节点的单链表
来源:互联网 发布:hshhsaaaws是什么软件 编辑:程序博客网 时间:2024/05/01 03:16
实验1
编写函数slnklist delx(linklist head, datatype x),删除不带头结点单链表head中第一个值为x 的结点。
并构造测试用例进行测试。
并构造测试用例进行测试。
#include "slnklist.h"/*请将本函数补充完整,并进行测试*/linklist delx(linklist head,datatype x){linklist pre=NULL,p,q; p=head; while(p&&p->info!=x){ pre=p;p=p->next; } // 找到第一个x的位置; if(p){ if(!pre) head=head->next; // 第一个数就是要删除的x; else pre->next=p->next; // 不在第一个数; free(p); } return head;}int main(){ datatype x; linklist head; head=creatbyqueue();/*尾插入法建立单链表*/ print(head); printf("请输入要删除的值:"); scanf("%d",&x); head=delx(head,x);/*删除单链表的第一个值为x的结点*/ print(head); delList(head);/*释放单链表空间*/ return 0;}
实验2
假设线性表(a1,a2,a3,…an)采用不带头结点的单链表存储,请设计算法函数linklist reverse1(linklist head)和
void reverse2(linklist *head)将不带头结点的单链表head就地倒置,使表变成(an,an-1,…a3.a2,a1)。并构造测试用例进行测试。
void reverse2(linklist *head)将不带头结点的单链表head就地倒置,使表变成(an,an-1,…a3.a2,a1)。并构造测试用例进行测试。
#include "slnklist.h"/*请将本函数补充完整,并进行测试*/linklist reverse1(linklist head){ linklist newH,q,p; p=head; newH=NULL; while(p!=NULL){ // 两次头插法,便改变一次顺序; q=p; p=p->next; q->next=newH; newH=q; } return newH;}void reverse2(linklist *head){ linklist p=NULL,q=*head; while(q!=NULL){ *head=q->next; // 保留下一个结点; q->next=p; p=q; q=*head; // 移动到下一个结点; } *head=p; // 指向逆置后的头结点;}int main(){ datatype x; linklist head; head=creatbystack();/*头插入法建立单链表*/ print(head);/*输出原链表*/ head= reverse1(head);/*倒置单链表*/ print(head);/*输出倒置后的链表*/ reverse2(&head);/*倒置单链表*/ print(head); delList(head); return 0;}
实验3
假设不带头结点的单链表head是升序排列的,设计算法函数linklist insert(linklist head,datatype x),将值为x的结点插入到链表head中,并保持链表有序性。
分别构造插入到表头、表中和表尾三种情况的测试用例进行测试。
分别构造插入到表头、表中和表尾三种情况的测试用例进行测试。
/**********************************//*文件名称:lab2_03.c *//**********************************/#include "slnklist.h"/*请将本函数补充完整,并进行测试*/linklist insert(linklist head ,datatype x){ linklist pre=NULL,h=head,p; while(h&&h->info<x){ pre=h; h=h->next; } p=(node*)malloc(sizeof(node)); p->info=x; if(pre==NULL){ // 第一种情况,表头; p->next=head; head=p; }else if(h){ // 第一种情况,表中; p->next=pre->next; pre->next=p; }else if(!h){ // 第一种情况,表尾; p->next=NULL; pre->next=p; } return head;}int main(){ datatype x; linklist head; printf("输入一组升序排列的整数:\n"); head=creatbyqueue();/*尾插入法建立单链表*/ print(head); printf("请输入要插入的值:"); scanf("%d",&x); head=insert(head,x);/*将输入的值插入到单链表适当位置*/ print(head); delList(head); return 0;}
实验4
编写算法函数linklist delallx(linklist head, int x),删除不带头结点单链表head中所有值为x的结点。
/**********************************//*文件名称:lab2_04.c *//**********************************/#include "slnklist.h"/*请将本函数补充完整,并进行测试*/linklist delallx(linklist head,int x){linklist pre=NULL,p;if(!head){printf("单链表是空的");return head; } p=head;do{ while(p&&p->info!=x){ // 查找第一个x; pre=p;p=p->next;} if(p){ if(!pre) head=head->next,pre=NULL; // 如果第一个x是在表头,要将pre重新赋为NULL; else pre->next=p->next; } p=p->next; // 从删除的位置的下一个开始查找;}while(p);return head;}int main(){ datatype x; linklist head; head=creatbyqueue();/*尾插入法建立单链表*/ print(head); printf("请输入要删除的值:"); scanf("%d",&x); head=delallx(head,x); print(head); delList(head); return 0;}
0 0
- 实验2 不带头节点的单链表
- 带头节点和不带头节点的单链表的区别
- 单链表的实现(不带头节点)
- 递归算法-不带头节点的单链表
- 数据结构实验2-不带头结点的单链表
- 带头节点和不带头节点的链表
- 带头节点的单链表
- 带头节点的单链表
- 带头节点的单链表
- 带头节点的单链表
- 链表 单链表 带头节点和不带头节点
- 求不带头结点的单链表的节点的个数
- linux大牛们的不带头节点的单链表
- 数据结构双语课->不带头节点的单链表实现
- 数据结构(一)单链表的基本操作(不带头节点)
- 不带头结点的单链表删除任意一个节点
- SlinkList(不带头节点的单链表)20171003
- 带头结点的单链表和不带头结点的单链表的倒数第K个节点
- 分解质因数
- HTTP长轮询(long polling)实现
- 蓝条下压和消失导致页面错乱问题解决方案
- 我理想中的《研发部项目开发流程》
- mybatis框架的两种分页
- 实验2 不带头节点的单链表
- 关于error:Cannot assign to 'self' outside of a method in the init family
- spring mvc 上传文件
- 纯Lua实现的位操作
- webbrowser指定显示网页的位置然后API实现模拟人工点击
- 基于密集轨迹的动作识别
- 第1課 メール
- IOS-IOS录音功能的实现
- JDBC中注册驱动为什么使用Class.forName