双链表的增删改查的功能实现代码。
2018-01-25 17:48
190 查看
1. 双链表比单链表在结构上多了一个前屈指针。这个前驱指针会指向该节点的前一个结点。所以其中的任意一个结点都能找到他的前一个结点位置并进行访问,也能找到他的下一个结点位置并进行访问。#include <stdio.h>#include <stdlib.h>typedef struct Node{ int date ; struct Node *qu; struct Node *hj;}Node;typedef Node* Linklist;void chuangjian (Linklist* L,int i){ Linklist p; *L = (Linklist)malloc(sizeof(Node)); (*L)->qu=NULL; (*L)->hj=NULL; int j=1; while (j<=i) { p=(Linklist)malloc(sizeof(Node));//linklist scanf("%d",&(p->date)); p->hj=(*L)->hj; (*L)->hj=p; p->qu=(*L); j++; }}void chazhao(Linklist L,int i,int *e){ int j=1; Linklist p; p=L->hj; while (p&&j<i) { p=p->hj; ++j; } *e = p->date;}void shuchu(Linklist l){ while (l->hj != NULL) { l = l->hj; printf("%d\n",l->date);}}void genggai(Linklist *L,int i,int e){ int j=1; Linklist p; p = (*L); while (p&&j<i) { p = p->hj; j++; } p->hj->date = e; printf("更改后的数据链为:\n"); while ((*L)->hj != NULL) { (*L) = (*L)->hj; printf("%d ",(*L)->date);} printf("\n");}void tianjia(Linklist *L,int i,int e){ int j = 1; Linklist p,q; p = (*L); while (p&&j<i) { p = p->hj; j++; } q = (Linklist)malloc(sizeof(Node)); q->date = e; q->hj = p->hj; p->hj->qu = q; p->hj = q; q->qu = p; while ((*L)->hj != NULL) { (*L) = (*L)->hj; printf("%d ",(*L)->date); } printf("\n");
}void shanchu(Linklist *L,int i,int *e){ int j = 1; Linklist p; p = (*L); while ((p->hj||p->qu)&&j<=i) { p=p->hj; j++; } *e=p->date; if (p->hj==NULL) { p->qu->hj=NULL; free(p); } else {p->qu->hj=p->hj; p->hj->qu=p->qu; free(p);}}int main(int argc, const char * argv[]){ Linklist l,s,h; printf("输入你要输入多少个数据\n"); int many; scanf("%d",&many); chuangjian(&l, many); s=l;h=l; shuchu(l); int i=8; printf("输入你要查找第多少个数据\n"); int t; scanf("%d",&t); chazhao(l,t, &i); printf("查找数据为%d\n",i); printf("输入修改位置,替换数据\n"); int place,sold; scanf("%d,%d",&place,&sold); genggai(&l,place,sold); printf("输入添加第几个位置,添加数据\n"); int p,m; scanf("%d,%d",&p,&m); tianjia(&s, p, m); printf("输入删除第几个位置\n"); int w; scanf("%d",&w); shanchu(&h,w,&i); while (h->hj!=NULL) { h=h->hj; printf("%d ",h->date); } printf("\n");
printf("删除数据是%d\n",i); return 0;}
}void shanchu(Linklist *L,int i,int *e){ int j = 1; Linklist p; p = (*L); while ((p->hj||p->qu)&&j<=i) { p=p->hj; j++; } *e=p->date; if (p->hj==NULL) { p->qu->hj=NULL; free(p); } else {p->qu->hj=p->hj; p->hj->qu=p->qu; free(p);}}int main(int argc, const char * argv[]){ Linklist l,s,h; printf("输入你要输入多少个数据\n"); int many; scanf("%d",&many); chuangjian(&l, many); s=l;h=l; shuchu(l); int i=8; printf("输入你要查找第多少个数据\n"); int t; scanf("%d",&t); chazhao(l,t, &i); printf("查找数据为%d\n",i); printf("输入修改位置,替换数据\n"); int place,sold; scanf("%d,%d",&place,&sold); genggai(&l,place,sold); printf("输入添加第几个位置,添加数据\n"); int p,m; scanf("%d,%d",&p,&m); tianjia(&s, p, m); printf("输入删除第几个位置\n"); int w; scanf("%d",&w); shanchu(&h,w,&i); while (h->hj!=NULL) { h=h->hj; printf("%d ",h->date); } printf("\n");
printf("删除数据是%d\n",i); return 0;}
相关文章推荐
- JAVA实现双向链表的增删功能的方法
- Online Coding开发模式 (通过在线配置实现一个表模型的增删改查功能,无需写任何代码)
- 单链表的增删改查功能实现C语言代码
- C语言实现单链表增删查找等功能
- JAVA实现双向链表的增删功能
- Online Coding开发模式 (通过在线配置实现一个表模型的增删改查功能,无需写任何代码)
- java 链表实现增删改查功能
- C语言双链表,可实现增删改查功能,还可以将链表反转。
- JAVA实现双向链表的增删功能
- 自己写了一个链表功能还不完善但是简单的增删改查功能都已经实现了
- java链表增删查改等功能的实现
- JAVA_WEB项目之Lucene检索框架实现增删查改的代码优化以及分页功能实现
- C语言双向链表实现根据使用频率安排元素位置的功能实例代码
- PHP实现数据库的增删查改功能及完整代码
- GridView绑定SqlDataSource以其自带功能实现增删查改等操作(不写后台代码)一
- 数据结构实验1 链表 实现学生信息存储,功能 增删改查,实现 结构类型
- 单链表增删改查代码实现/约瑟夫环代码实现
- java实现聊天室功能(包含全部代码,有界面)
- JS 实现网页中的"运行代码"功能
- jedisClient操作redis实现增删改查功能