C语言之双向链表
发布时间:2020-12-13 20:24:40 所属栏目:PHP教程 来源:网络整理
导读:1,双向链表简介 。 双向链表也叫双链表,是链表的1种,它的每一个数据结点中都有两个指针,分别指向直接后继和直接先驱。所以,从双向链表中的任意1个结点开始,都可以很方便地访问它的先驱结点和后继结点。1般我们都构造双向循环链表。 2,例子要求: 完成
1,双向链表简介。 双向链表也叫双链表,是链表的1种,它的每一个数据结点中都有两个指针,分别指向直接后继和直接先驱。所以,从双向链表中的任意1个结点开始,都可以很方便地访问它的先驱结点和后继结点。1般我们都构造双向循环链表。 2,例子要求: 完成双向链表的插入、删除和查找,将学生管理系统使用的数组,以双向链表的方式实现,能够支持无穷制的学生人数的增删改查和保存。 3,代码实现。 #include <stdio.h> #include <string.h> #include <stdarg.h> #include <stdlib.h> typedef struct Student{ char name[20]; int score; char phoneNum[14]; } str_student; typedef struct Node{ str_student data; struct Node *prior; //指向先驱结点 struct Node *next; //指向后继结点 }Node,*DLinkList; // 初始化1个学生链表 DLinkList initDouLinkList() { Node *L,*p,*r; char phone[14]; L = (Node *)malloc(sizeof(Node)); L->next = NULL; r = L; r->next = NULL; while(1) { p = (Node *)malloc(sizeof(Node)); printf("input name is out exit,input student name: "); scanf("%s",name); if (strcmp(name,"out")==0) { break; } strcpy(p->data.name,helvetica; font-size: 14px;"> printf("input student score:"); scanf("%d",&score); p->data.score = score; printf("input student phone:"); strcpy(p->data.phoneNum,helvetica; font-size: 14px;"> p->next = r->next; r->next = p; r = p; } return L; } //添加学生信息 DLinkList insertDouLinkListStuent(DLinkList L,int i,char *name,int score,char *phonenum) DLinkList p,s; p = L->next; int tempi; for(tempi = 1;tempi < i⑴; tempi++) p = p->next; s = (Node *)malloc(sizeof(Node)); s->data.score = score; strcpy(s->data.name,helvetica; font-size: 14px;"> strcpy(s->data.phoneNum,phonenum); s->next = p->next; p->next->prior = s; s->prior = p; p->next = s; // 查找学生信息 int findDouLinkListStudent(DLinkList L,char *name) DLinkList p; int i = 1; while(p != NULL && (strcmp(p->data.name,name)!=0)) ++i; if(p == NULL) return 0; else return i; // 移除1个学生 DLinkList removeDouLinkListStudent(DLinkList L,helvetica; font-size: 14px;"> int tempi = 1; int i =findDouLinkListStudent(L,helvetica; font-size: 14px;"> while((tempi++) != i && p != NULL) printf("no list "); else if(p->next == NULL) p->prior->next = NULL; free(p); else p->prior->next = p->next; p->next->prior = p->prior; // 铺助打印信息 void printfInfo(DLinkList L) while (p!=NULL) printf("student name %s ",p->data.name); printf("student name %d ",p->data.score); p=p->next; void main () char name2[20]="hanmeimei"; char phone2[14]="13612345678"; DLinkList L =initDouLinkList(); // 2.1 初始化学生双向链表数据 insertDouLinkListStuent(L,1,name2,99,phone2); printfInfo(L); // 2.2 查找学生zhangsan findDouLinkListStudent(L,'zhangsan'); // 2.3 删除学生zhangsan removeDouLinkListStudent(L,helvetica; font-size: 14px;"> // 2.4 添加学生zengteng <版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!> 原博客地址: http://blog.itpub.net/26230597/viewspace⑴386602/? 原作者:黄杉 (mchdba) ------------------------------------------------------------------------------------------------------? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |