单链表的基本操作(查找,插入,删除)
2016-09-25 17:11
716 查看
这周老师给的作业跟上周貌似差不多。只是用了单链表。
[align=left]完成单链表的基本操作函数。[/align]
[align=left]1) 初始化单链表[/align]
2) 给定的数据元素存放在一维数组中,分别完成头插法和尾插法建立单链表
[align=left]3) 将数据元素从键盘依次输入,分别完成头插法和尾插法建立单链表[/align]
[align=left]4) 输出单链表的长度[/align]
[align=left]5) 实现按位查找和按值查找[/align]
[align=left]6) 实现插入和删除操作[/align]
[align=left]7) 实现遍历单链表操作[/align]
ps.贴上来的代码空格有点小奇怪啊。不用应该没什么太大影响。= =处女座强迫症伤不起 。
[align=left]完成单链表的基本操作函数。[/align]
[align=left]1) 初始化单链表[/align]
2) 给定的数据元素存放在一维数组中,分别完成头插法和尾插法建立单链表
[align=left]3) 将数据元素从键盘依次输入,分别完成头插法和尾插法建立单链表[/align]
[align=left]4) 输出单链表的长度[/align]
[align=left]5) 实现按位查找和按值查找[/align]
[align=left]6) 实现插入和删除操作[/align]
[align=left]7) 实现遍历单链表操作[/align]
#include <cstdio> #include <cstring> #include <cstdlib> //查找1.内容2.序号 //插入 //删除 typedef struct student { int num; char name[10]; }STU; typedef struct Node { STU data; struct Node * next; }Node; void denglu(Node *L);//登录函数 void chazhao(Node *L);//查找函数 void Printf(Node *L);//输出函数 void CreateFromHead(Node *L);//头插法 void CreateFormTail(Node *L);//尾插法 void panduan(Node *L);//判断头插还是尾插 void Get(Node *L);//按序号结点查找 void Locate(Node *L);//按内容查找(值) void Inslist(Node *L);//插入 void Dellist(Node *L);//删除 void Dellist(Node *L)//删除 { system("CLS"); int n; printf("请输入要删除的结点\n"); scanf("%d",&n); if(n<=0){ printf("输入的数据不合法,请重新输入\n"); Dellist(L); } Node *pre,*r; int k=0; pre=L; while(pre->next !=NULL&&k<n-1){ pre=pre->next; k=k+1; } if(pre->next==NULL){ printf("没有找到该结点,请重新输入\n"); Dellist(L); } r=pre->next; pre->next=r->next; free(r); printf("删除成功!\n"); denglu(L); } void Inslist(Node *L)//插入 { system("CLS"); int n; printf("请输入在第几个位置插入数据\n"); scanf("%d",&n); printf("请输入插入的学号,姓名\n"); int num1; char name1[10]; scanf("%d %s",&num1,name1); Node *pre,*s; int k=0; if(n<=0){ printf("输入的数据不合法,请重新输入\n"); Inslist(L); } pre=L; while(pre!=NULL&&k<n-1){ pre=pre->next; k=k+1; } if(pre==NULL){ printf("无法找到该节点,请重新输入\n"); Inslist(L); } s=(Node*)malloc(sizeof(Node)); strcpy(s->data .name ,name1); s->data.num=num1; s->next =pre->next ; pre->next =s; printf("插入成功!\n"); denglu(L); } void Locate(Node *L)//按内容查找(值) { system("CLS"); int n; printf("请输入要查找的学号\n"); scanf("%d",&n); Node *p; p=L->next; while(p!=NULL){ if(p->data.num!=n){ p=p->next; }else break; } printf("你要查找的学号所对应的信息为%d %s\n",p->data.num,p->data.name); denglu(L); } void Get(Node *L)//按序号结点查找 { system("CLS"); int n; printf("请输入你要查找的结点\n"); scanf("%d",&n); if(n<=0){ printf("输入的数据不合法,请重新输入\n"); Get(L); } Node *p; p=L; int j=0; while((p->next!=NULL)&&(j<n)){ p=p->next; j++; } if(n==j){ printf("你要查找的结点的储存位置的数据为%d %s\n",p->data.num,p->data.name); } denglu(L); } void Printf(Node *L) { int q=0; Node *p=L->next; while(p!=NULL) { q++; printf("%d %s\n",p->data.num,p->data.name); p=p->next; } printf("单链表长度为%d\n",q); denglu(L); } void chazhao(Node *L) { printf("1.按序号查找\n"); printf("2.按内容查找\n"); printf("3.返回主界面\n"); int aa; scanf("%d",&aa); switch(aa){ case 1:Get(L); case 2:Locate(L); case 3:denglu(L);break; default: printf("输入错误请重新输入\n"); chazhao(L); } } void denglu(Node *L) { int a; printf("请选择你要做什么\n"); printf("1.查找\n"); printf("2.插入\n"); printf("3.删除\n"); printf("4.打印现有的学生信息及单链表长度\n"); printf("5.退出\n"); scanf("%d",&a); switch(a){ case 1:chazhao(L); case 2:Inslist(L); case 3:Dellist(L); case 4:Printf(L); case 5:printf("谢谢使用\n");exit(0); default: printf("输入错误请重新输入\n"); denglu(L); } } void CreateFromHead(Node *L)//头插法 { Node *s; int n;//n为元素个数 printf("请输入元素个数\n"); scanf("%d",&n); printf("请输入学号姓名\n"); for(int i=1;i<=n;i++) { s=(Node *)malloc(sizeof(Node)); scanf("%d %s",&s->data.num,s->data.name); s->next=L->next; L->next=s; } } void CreateFormTail(Node *L)//尾插法 { Node *s,*r; r=L; int n;//n为元素个数 printf("请输入元素个数\n"); scanf("%d",&n); printf("请输入学号姓名\n"); for(int i=1;i<=n;i++) { s=(Node *)malloc(sizeof(Node)); scanf("%d %s",&s->data.num,s->data.name); r->next=s; r=s; if(i==n){ r->next=NULL; } } } Node *InitList(Node *L)//初始化单链表 { L=(Node *)malloc(sizeof(Node)); L->next=NULL; return L; } void panduan(Node *L) { int q; printf("请选择用哪种方式建立链表\n"); printf("1.头插法\n"); printf("2.尾插法\n"); scanf("%d",&q); switch(q){ case (1): CreateFromHead(L); printf("输入成功!\n"); break; case (2): CreateFormTail(L); printf("输入成功!\n"); break; default: printf("输入错误请重新输入\n"); panduan(L); } } int main() { Node *L=NULL; L=InitList(L); panduan(L); denglu(L); return 0; }
ps.贴上来的代码空格有点小奇怪啊。不用应该没什么太大影响。= =处女座强迫症伤不起 。
相关文章推荐
- 关于链表结构的基本操作 c 实现 (创建,插入删除,反转,合并链表,查找,是否有环,链表相交情况)
- 线性表的链式存储格式基本操作:创建链表、插入、删除、查找、求表长、打印链表
- 链表的基本操作(创建,查找指定位置元素,删除指定元素,插入,倒置,去重,求集合的差,分别交换结点与交换结点值实现的冒泡排序,将两个有序链表合并成一个有序链表)c语言实现
- 链表基本操作(创建,插入,查找,删除)-C语言
- 单链表的基本操作(尾插,尾删,头插,头删,查找,指定位置插入、删除,指定元素删除、全部删除等)
- 用C语言编写一个包含链表的初始化、插入、删除、查找等基本操作的程序。
- 链表基本操作(删除,插入,查找)
- 单链表基本操作的实现--创建、插入、查找、删除
- 链表的基本操作(C语言版):建立,插入,删除,查找,输出
- 链表(单双链表)用法与基本操作(构建、查找、插入、删除)实现
- 单链表结点读取、插入、删除操作(基本操作)-C++
- 链表操作:创建,插入,删除,查找等功能
- 单链表的基本操作:建立,求长度,输出,排序,插入,删除,逆置
- 线性表的基本操作:新建,插入,删除,查找(C语言版)
- C-链表的一些基本操作【创建-删除-打印-插入】
- 链表的一些基本操作:动态链表、插入和删除等
- 学习笔记——C语言实现单链表的基本操作:创建、输出、插入结点、删除结点、逆序链表
- 链表基本操作(建立、修改,插入、删除、打印)
- 单链表操作(建表、插入、删除、查找、求表长),
- 二叉查找树的基本操作之查找插入删除