数据结构之双链表带头节点
2016-03-28 00:02
411 查看
#include <stdio.h> #include <malloc.h> #include <stdlib.h> typedef int DataType; typedef struct DLinkNode { DataType data; struct DLinkNode *prior; struct DLinkNode *rear; }DLinkNode,*DLinkList; // ²»´øÍ·½ÚµãµÄË«Á´±í int CreatDLinkList(DLinkList *L) { *L=(DLinkNode *)malloc(sizeof(DLinkNode)); (*L)->data=NULL; (*L)->prior=NULL; (*L)->rear=NULL; return 0; } // ²åÈëÔªËØ int InsertDLinkList(DLinkList L,DataType x) { DLinkList p=L; DLinkNode *s=(DLinkNode *)malloc(sizeof(DLinkNode)); s->data=x; s->rear=NULL; s->prior=NULL; while(p->rear && p->rear->data>x) p=p->rear; if(p->rear==NULL) { s->prior=p; p->rear=s; } else { // ºó²å s->prior=p; s->rear=p->rear; p->rear->prior=s; p->rear=s; } return 0; } /* */ int DeleteDLinkList(DLinkList L,DataType x) { DLinkList p=L; p=p->rear; while(p && p->data!=x) { p=p->rear; } if(!p) return 0; else { if(p->rear==NULL) { p->prior->rear=NULL; free(p); return 1; } else { p->prior->rear=p->rear; p->rear->prior=p->prior; free(p); return 1; } } return 0; } // ´òÓ¡ÔªËØ void DisplayDLinkList(DLinkList L) { DLinkList p=L; while(p->rear) { p=p->rear; printf("%d ",p->data); } printf("\n"); } int main() { int i; DLinkList L=NULL; CreatDLinkList(&L); for(i=40;i>20;i--) { InsertDLinkList( L,i); } for(i=0;i<20;i++) { InsertDLinkList( L,i); } DisplayDLinkList(L); for(i=10;i<20;i++) { DeleteDLinkList( L,i); } DisplayDLinkList(L); return 0; }
数据结构之双链表带头节点
相关文章推荐
- C 算法与数据结构 队列
- C 数据结构与算法 树之二叉树
- 数据结构3.2--栈的链式实现
- 【HDU5654 BestCoder Round 77 (div1) D】【前驱位置思想 排序 树状数组】xiaoxin and his watermelon candy 区间内多少个不同连续单升三元
- 数据结构与算法——AVL树简介
- [Java8 Collection源码+算法+数据结构]-Map+Set(一)
- 数据结构 1、概述 特性、分类、复杂性分析
- python 下的数据结构与算法---8:哈希一下【dict与set的实现】
- 数据结构-题目1
- linux 学习之数据结构算法
- python 下的数据结构与算法---7:查找
- [Oracle] 关系型数据库排序算法和数据结构以及关联查询
- 数据结构_KMP
- 数据结构与算法(二叉查找树)
- 《数据结构》2.10设计一个算法,删除顺序表中值为item的元素,要求算法的时间复杂度是O(n),空间复杂度是O(1)
- 数据结构实验之栈八:栈的基本操作
- 数据结构实验之栈四:括号匹配
- 数据结构实验之栈三:后缀式求值
- 数据结构实验之栈一:进制转换
- 数据结构实验之栈二:一般算术表达式转换成后缀式