双向循环链表的创建修改插入删除操作
2014-08-03 18:40
411 查看
#include<stdio.h> #include<malloc.h> #define N 3 /*定义链表的长度*/ #define NULL 0 int m=N; struct stu /*定义一个结构体变量*/ { int num; char name[20]; struct stu *before; struct stu *next; }; /*主函数*/ void main() { struct stu *putin(void); /////链表输入函数 void putout(struct stu *p,int n); /////链表输出函数 struct stu *insert(struct stu *p); /////链表插入函数 struct stu *del(struct stu *p); /////链表删除函数 void search(struct stu *p); /////链表查询函数 struct stu *revise(struct stu *p); /////链表修改函数 struct stu *suo;int n,flag=1; ///////////////////////////////////////////////////////////////////////////////////////////////////////////// suo=putin(); while(flag) { printf("请选择想要进行的操作:\n1:查询, 2:修改, 3:插入, 4:删除, 5:输出,6:结束 "); scanf("%d",&n); switch(n) { case 1:search(suo);break; case 2:suo=revise(suo);break; case 3:suo=insert(suo);break; case 4:suo=del(suo);break; case 5:putout(suo,m);break; case 6:flag=0;break; } } } /////////////////////////////////////////////////////////////////////////////////////////////////////////////// /*下面的函数构进行链表的输入操作*/ struct stu *putin(void) { int i=0; struct stu *p1,*p2,*head; p1=p2=(struct stu *)malloc(sizeof(struct stu)); head=NULL; printf("输入%d个学号和名字:\n",N); scanf("%d,%s",&p1->num,&p1->name); head=p2=p1; for(i=0;i<N-1;i++) { p1=(struct stu*)malloc(sizeof(struct stu)); scanf("%d,%s",&p1->num,&p1->name); p2->next=p1;p1->before=p2; p2=p1; } p2->next=head; head->before=p2; return(head); } /*下面的函数进行链表输出操作*/ void putout(struct stu *p,int n) { int i=0; struct stu *start; start=p; printf("从头到尾输出为:\n"); while(i<n) { printf("No.:%d name:%s\n",p->num,p->name); p=p->next; i++; } printf("\n从尾到头输出为:\n"); p=start->before; while(i>0) {printf("No.:%d name:%s\n",p->num,p->name); p=p->before; i--; } printf("从第二节点循环到第一个节点为:\n"); p=start; p=p->next; while(i<n) { printf("No.:%d name:%s\n",p->num,p->name); p=p->next; i++; } } /*下面表示链表的插入操作*/ struct stu* insert(struct stu *p) { m++; int i=0,n=0; struct stu *p1,*p2; printf("您希望在第几个节点后插入?"); scanf("%d",&n); p2=p1=p; if(n==0) { struct stu *pnew; pnew=(struct stu *)malloc(sizeof(struct stu)); printf("请输入新同学的学号的姓名:"); scanf("%d,%s",&pnew->num,&pnew->name); p2=p->before; pnew->next=p; p->before=pnew; p2->next =pnew; pnew->before=p2; p=pnew; } else { while(i<n) { p2=p1; p1=p1->next; i++; } struct stu *pnew; pnew=(struct stu *)malloc(sizeof(struct stu)); printf("请输入新同学的学号和姓名:"); scanf("%d,%s",&pnew->num,&pnew->name); pnew->before=p2; p2->next=pnew; p1->before=pnew; pnew->next=p1; } return(p); } /*链表删除操作*/ struct stu *del(struct stu *p) { m--; int n,i=0; struct stu *p1,*p2; p2=p1=p; printf("需要删除第几个节点?"); scanf("%d",&n); if(n==1) { p1=p1->next; p2=p2->before; p1->before=p2; p2->next=p1; p=p1; } else { while(i<n) { p2=p1; p1=p1->next; i++; } p2->before->next=p1; p1->before=p2->before; } return(p); } /*下面的函数表示链表的查询*/ void search(struct stu *p) { int n,i; printf("请输入希望查询的位置:"); scanf("%d",&n); for(i=0;i<n-1;i++) p=p->next; printf("No.:%d name:%s\n",p->num,p->name); } /*下面的函数表示链表的修改*/ struct stu *revise(struct stu *p) { struct stu *p1; int i,n; p1=p; printf("请输入希望修改的位置:"); scanf("%d",&n); for(i=0;i<n-1;i++) p1=p1->next; printf("请输入修改的内容:"); scanf("%d,%s",&p1->num,&p1->name); return(p); }
相关文章推荐
- 双向循环链表的创建,插入,删除操作
- 双向循环链表的创建、插入、删除、求长、查询、打印、修改、清空、销毁
- (C++版)链表(四)——实现双向循环链表创建、插入、删除等简单操作
- (C语言版)链表(四)——实现双向循环链表创建、插入、删除、释放内存等简单操作
- Qt5.9Creator读写Mysql5.7.17数据库详细例子(数据库基本操作:创建表,查询,插入,删除,修改)
- oracle 视图 创建 操作 简单 复杂 基表 不存在 增 删 改 插入 修改 删除 查看 结构
- 双向循环链表简单的插入、删除、修改以及查找功能的实现
- 双向链表的有关操作(创建,遍历,插入,删除)
- 循环链表 实现对循环链表的初始化,创建,插入,删除,输出操作
- C++链表的创建、插入、删除、查找、合并、排序、修改等操作的实现
- 双向循环链表的创建,插入与删除。
- (C语言版)链表(四)——实现双向循环链表创建、插入、删除、释放内存等简单操作
- 双向循环链表简单的插入、删除、修改以及查找功能的实现
- (C语言版)链表(四)——实现双向循环链表创建、插入、删除、释放内存等简单操作
- 双向循环链表(创建·插入·删除·遍历)
- (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作
- (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作
- (C++版)链表(四)——实现双向循环链表创建、插入、删除等简单操作
- JDBC 数据库连接 创建表格、插入、查询、删除、修改数据 基本操作
- c++实现单链表创建,删除,遍历,插入,修改操作