双向链表的实现
来源:互联网 发布:守望先锋数据app 编辑:程序博客网 时间:2024/05/01 05:52
之前的博客讲到了线性表的链式存储结构,实现了链表的各种操作(http://blog.csdn.net/u010429311/article/details/51037580)。但是,单链表有单向性的缺点,为了克服这一缺点,可以尝试实现双向链表。下图是双向链表的结构:
我们也可以实现双向链表的一些基本操作:
以下是实现基本操作的代码:
#include <stdio.h>#include <malloc.h>#define OK 1#define ERROR 0typedef int ElemType;typedef int Status;typedef struct DNode { ElemType data; struct DNode *next; struct DNode *prior; //指向上一个结点的指针} DNode, *DulLinkList;Status createList(DulLinkList &L, int n) { DulLinkList p; L = (DulLinkList) malloc(sizeof(DNode)); L->next = NULL; L->prior = NULL; if (n == 0) { //如果长度为0,则头结点指向的指针指向本身 L->next = L->prior = L; return OK; } int i = 0; for (i = n; i > 0; i--) { p = (DulLinkList) malloc(sizeof(DNode)); scanf("%d", p->data); p->next = L->next; L->next = p; p->prior = L; if (i == n) //最后一个元素的next指针指向头结点 p->next = L; p->next->prior = p; //下一个结点的prior指针指向前一个结点 } return OK;}Status insertList(DulLinkList &L, int i, ElemType e) { DulLinkList s, p; p = L; int j = 0; while (p && j < i - 1) { //寻找第i-1个结点 p = p->next; j++; if (p == L) break; } if (p == L || j > i - 1) return ERROR; if (!(s= (DulLinkList) malloc(sizeof(DNode)))) return ERROR; s->data = e; //插入结点 s->prior = p->prior; p->prior->next = s; s->next = p; p->prior = s; return OK;}Status deleteList(DulLinkList &L, int i, ElemType &e) { DulLinkList p; p = L; int j = 0; while (p->next && j < i - 1) { //寻找第i-1个结点 p = p->next; j++; if (p->next == L) break; } if (p->next == L || j > i - 1) return ERROR; e = p->data; //获取结点元素 p->prior->next = p->next; //删除结点 p->next->prior = p->prior; free(p); //释放被删除结点的空间 return OK;}
2 0
- 双向链表的实现
- 双向链表的实现
- 双向链表的实现
- 双向链表的实现
- 双向链表的实现
- 双向链表的实现
- 双向链表的实现
- 双向链表的实现
- 双向链表的实现
- 双向链表的实现
- 双向链表的实现
- 双向链表的实现
- 双向链表的实现
- 双向链表的实现
- 双向链表的实现
- 双向链表的实现
- 双向链表的实现
- 双向链表的实现
- Android 看IntentService源码延伸
- python之js/url/python互动
- 位运算
- Camera使用setPreviewCallbackWithBuffer优化内存
- [iOS] 报错:Not a PNG file...
- 双向链表的实现
- UVA122(BFS)
- Codeforces 659F Polycarp and Hay【BFS】
- 利用PathFilter上传多个本地的文件
- 设计模式——访问器模式
- DialogFragment文档
- 【C++】int转换为string的两种方法(to_string、字符串流)
- 开发环境小结
- SQL pivot 行转列