喜羊羊系列之数据结构双向链表
2015-04-11 15:25
316 查看
博客:http://blog.csdn.net/muyang_ren
关于双向链表的原理很多都有说明,我这只是与前面的内核链表作个对比,同样实现数据的增删差改。
截图:
1、main.c
2、头文件
doublelist.h
3、双向链表实现函数
doublelist.c
关于双向链表的原理很多都有说明,我这只是与前面的内核链表作个对比,同样实现数据的增删差改。
截图:
1、main.c
#include "doublelist.h" int main(void) { int num, i; double_plist list; doublelist_init(&list); //初始化双向链表 printf("\n请输入链表长度:"); scanf("%d",&num); //增 printf("---------------- ① ----------------\n"); printf("----------------增加----------------\n"); for(i=1;i<=num;i++){ printf(">>> 增加 %d\n", i); doublelist_addnum(list,i); //加入数据到双向链表 } //查 printf("---------------- ② ----------------\n"); printf("-----------------显示----------------\n"); doublelist_show(list); //显示双向链表内数据 //删 printf("---------------- ③ ----------------\n"); printf("----------------删除----------------\n"); printf("请输入要删除的数据\n"); scanf("%d",&num); doublelist_del(list,num); //再查 printf("----------------显示----------------\n"); doublelist_show(list); //显示双向链表内数据 //修改 printf("\n---------------- ④ ----------------\n"); printf("----------------增加----------------\n"); printf(">>>: n m ,则将 n 修改为 m\n"); scanf("%d %d", &i, &num); doublelist_revise(list, i, num); //显示双向链表内数据 //再再查 printf("----------------显示----------------\n"); doublelist_show(list); //显示双向链表内数据 return 0; }
2、头文件
doublelist.h
#ifndef __doubleLIST_H__ #define __doubleLIST_H__ #include <stdio.h> #include <stdlib.h> #include <stdbool.h> typedef int datatype; typedef struct doublelist{ datatype data; struct doublelist *next, *prior; }double_list,*double_plist; extern void doublelist_new(double_plist * L); //增 extern void doublelist_init(double_plist * L);//初始化表头 extern void doublelist_show(double_plist l);//查 extern void doublelist_addnum(double_plist, int); extern void doublelist_del(double_plist ,int);//删 extern void doublelist_revise(double_plist ,int , int );//改 #endif
3、双向链表实现函数
doublelist.c
#include "doublelist.h" //开辟新的节点空间 void doublelist_new(double_plist *list){ *list=(double_plist)malloc(sizeof(double_list)); if(NULL == *list){ perror("malloc\n"); exit(-1); } } //双向链表初始化 void doublelist_init(double_plist *list){ *list=(double_plist)malloc(sizeof(double_list)); if(NULL == *list){ perror("malloc\n"); exit(-1); } (*list)->next=(*list)->prior=(*list); } //在双向链表表头添加节点并赋值 void doublelist_addnum(double_plist list,int num) { double_plist new; doublelist_new(&new); //开辟新的空间给new new->data = num; new->prior=list->prior; new->prior->next=new; new->next=list; list->prior=new; } //查 //显示双向链表内数据 void doublelist_show(double_plist list) { int i=1; double_plist p; for(p=list->next; p!=list; p=p->next){ while(i++%6==0){ printf("\n"); } printf("%d\t",p->data); } printf("\n"); } //删 void doublelist_del(double_plist list,int num) { int flag=0; //flag 找到删除点的标志位 double_plist p; for(p=list->next; p!=list; p=p->next){ //如果找到了链表对应的值 if(num == p->data){ p->prior->next=p->next; p->next->prior=p->next; flag=1; //标志位置1; free(p); } } //如果没找到链表对应的值 if(flag==0){ printf("***在链表中没有找到对应的值***\n"); } } //修改 void doublelist_revise(double_plist list,int old_num, int new_num) { int flag=0; //flag 找到删除点的标志位 double_plist p; for(p=list->next; p!=list; p=p->next){ //如果找到了链表对应的值 if(old_num == p->data){ p->data = new_num; flag=1; //标志位置1; } } //如果没修改链表对应的值 if(flag==0){ printf("***在链表中没有找到对应的值***\n"); } }
相关文章推荐
- 数据结构学习笔记三 循环链表及双向链表
- 数据结构:双向链表2
- 重温数据结构系列随笔:单链表(c#模拟实现)
- 把二元查找树转变成排序的双向链表[数据结构]
- [何海涛][数据结构][把二元查找树转变成排序的双向链表]浅析
- 数据结构(C#)--双向链表
- 双向链表-数据结构-java实现
- 重温数据结构系列随笔:单链表(c#模拟实现)
- 数据结构学习笔记 --- 线性表 (双向链表、循环链表)
- 使用java实现双向链表数据结构
- 数据结构:双向链表2
- 每天学习一算法系列(2)(把二元查找树转变成排序的双向链表,要求输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表.)
- 练习系列 - 1、把二元查找树转变成排序的双向链表
- 数据结构的C实现_双向循环链表
- 数据结构-双向链表
- 数据结构:双向链表1
- 数据结构学习之双向链表
- 数据结构学习系列二-链表的C++实现
- 菜鸟自学数据结构系列——(一)如何写出能够在VC下运行的单链表生成程序
- 【数据结构】双向链表的创建和读取