数据结构实验2-不带头结点的单链表
来源:互联网 发布:淘宝宝贝综合排名 编辑:程序博客网 时间:2024/05/22 00:40
/*编写函数slnklist delx(linklist head, datatype x),删除不带头结点单链表head中第一个值为x 的结点。并构造测试用例进行测试。*//**********************************//*文件名称:lab2_01.c *//**********************************/#include "slnklist.h"/*请将本函数补充完整,并进行测试*/linklist delx(linklist head,datatype x){ linklist p = head,pre=NULL;//一定要初始化pre=NULL while(p&&p->info!=x) { pre = p; p = p->next; } if(p) { if(!pre) { head = head->next; } 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;}
/**********************************//*文件名称:lab2_02.c *//**********************************//*假设线性表(a1,a2,a3,…an)采用不带头结点的单链表存储,请设计算法函数linklist reverse1(linklist head)和void reverse2(linklist *head)将不带头结点的单链表head就地倒置,使表变成(an,an-1,…a3.a2,a1)。并构造测试用例进行测试。*/#include "slnklist.h"/*请将本函数补充完整,并进行测试*/linklist reverse1(linklist head){ linklist p,q; p=head; head = NULL; while(p) //核心 { q = p->next; p->next = head; head=p; p=q; } return head;}void reverse2(linklist *head) //不返回值,那就从指针上下手 { linklist p,q; p=*head; *head = NULL; while(p) { q = p->next; p->next = *head; *head=p; p=q; }}int main(){ datatype x; linklist head; head=creatbystack(); /*头插入法建立单链表*/ print(head); /*输出原链表*/ head= reverse1(head); /*倒置单链表*/ print(head); /*输出倒置后的链表*/ reverse2(&head); /*倒置单链表*/ print(head); delList(head); return 0;}
/*假设不带头结点的单链表head是升序排列的,设计算法函数linklist insert(linklist head,datatype x),将值为x的结点插入到链表head中,并保持链表有序性。分别构造插入到表头、表中和表尾三种情况的测试用例进行测试。*//**********************************//*文件名称:lab2_03.c *//**********************************/#include "slnklist.h"/*请将本函数补充完整,并进行测试*/linklist insert(linklist head ,datatype x){ linklist pre,p,s; s = (linklist)malloc(sizeof(node)); s->info = x; p = head; pre=NULL; while(p&&p->infonext; } if(!pre) //插在表头 { s->next = head; head = s; }else{ //插在中间或者末尾 pre->next = s; s->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;}
/*编写算法函数linklist delallx(linklist head, int x),删除不带头结点单链表head中所有值为x的结点。*//**********************************//*文件名称:lab2_04.c *//**********************************/#include "slnklist.h"/*请将本函数补充完整,并进行测试*/linklist delallx(linklist head,int x){ linklist p,t; while(head)//如果要删除的是第一个 { if(head->info==x) { p=head; head=head->next; free(p);//回收p } else { break; } } if(head)//如果删除的不是第一个 { p=head; while(p->next) { if(p->next->info==x) { t=p->next; p->next=p->next->next; free(t); } else { p=p->next; } } } 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;}
slnklist.h
#include <stdio.h>/**************************************//* 链表实现的头文件,文件名slnklist.h *//**************************************/ typedef int datatype; typedef struct link_node{ datatype info; struct link_node *next; }node;typedef node *linklist;/**********************************//*函数名称:creatbystack() *//*函数功能:头插法建立单链表 *//**********************************/linklist creatbystack(){ linklist head,s; datatype x; head=NULL; printf("请输入若干整数序列:\n"); scanf("%d",&x); while (x!=0) /*以0结束输入*/ { s=(linklist)malloc(sizeof(node)); /*生成待插入结点*/ s->info=x; s->next=head; /*将新结点插入到链表最前面*/ head=s; scanf("%d",&x); } return head; /*返回建立的单链表*/}/**********************************//*函数名称:creatbyqueue() *//*函数功能:尾插法建立单链表 *//**********************************/linklist creatbyqueue(){ linklist head,r,s; datatype x; head=r=NULL; printf("请输入若干整数序列:\n"); scanf("%d",&x); while (x!=0) /*以0结束输入*/ { s=(linklist)malloc(sizeof(node)); s->info=x; if (head==NULL) /*将新结点插入到链表最后面*/ head=s; else r->next=s; r=s; scanf("%d",&x); } if (r) r->next=NULL; return head; /*返回建立的单链表*/}/**********************************//*函数名称:print() *//*函数功能:输出不带头结点的单链表 *//**********************************/void print(linklist head){ linklist p; int i=0; p=head; printf("List is:\n"); while(p) { printf("%5d",p->info); p=p->next; i++; if (i%10==0) printf("\n"); } printf("\n");}/**********************************//*函数名称:delList() *//*函数功能:释放不带头结点的单链表 *//**********************************/void delList(linklist head){ linklist p=head; while (p) { head=p->next; free(p); p=head; }}
本文地址:http://liuyanzhao.com/3600.html
转载请注明
0 0
- 数据结构实验2-不带头结点的单链表
- 数据结构实验3-带头结点的单链表
- 数据结构:不带头结点的单链表
- 数据结构——单链表(带头结点和不带头结点)
- 数据结构_不带头结点的链表逆制
- 不带头结点的单链表
- 不带头结点的单链表
- 带头结点与不带头结点的单链表-LinkList
- 实验2 不带头节点的单链表
- 带头结点的单链表实验报告
- 【数据结构】·【带头结点的单链表】
- java数据结构之带头结点的单链表
- 数据结构——带头结点的单链表
- 《数据结构》带头结点单链表的合并
- 不带头结点的单链表的建立
- 不带头结点的单链表的建立
- 不带头结点的单链表的删除
- 单链表的实现(不带头结点)
- 几款Ubuntu下的终端扩展工具推荐
- android textview系统默认的颜色值是多少
- u-center 配置u-blox GPS芯片
- spring security中当前用户信息
- java中double类型显示两个小数,比如12.00
- 数据结构实验2-不带头结点的单链表
- 事物的描述--信息
- Spark SQL CLI
- Android中的动画
- Codeforces 501D Misha and Permutations Summation
- 3D bin picking
- oracle行转列函数
- 数据结构实验3-带头结点的单链表
- zx--LTE