双链表的创建、遍历、测长、插入、删除、销毁
来源:互联网 发布:淘宝水果供应商 编辑:程序博客网 时间:2024/06/05 10:20
今天把双链表复习了一遍,双链表主要是插入和删除的 操作,两个操作的示意图如下
链表的插入
链表的删除
代码如下:
typedef struct node {int data;struct node *next;struct node *pre;}Node,*PNode;PNode createDLinklist(int length){int data = 0;PNode pHead = (PNode)malloc(sizeof(Node));PNode pTail = NULL;if (pHead == NULL) {printf("内存分配失败!\n");exit(EXIT_FAILURE);}pHead->data = 0;pHead->pre = NULL;pHead->next = NULL;pTail = pHead;for (int i = 1;i <= length;++i) {PNode pNew = (PNode)malloc(sizeof(Node));if (pNew == NULL) {printf("内存分配失败!\n");exit(EXIT_FAILURE);}printf("请输出第%d个元素的值:", i);scanf_s("%d", &data);pNew->data = data;pNew->next = NULL;pNew->pre = pTail;pTail->next = pNew;pTail = pNew;}return pHead;}void traverseDLinklist(PNode pHead){PNode p = pHead;printf("遍历结果如下:\n");while (p->next != NULL){printf("uuu %d\n", p->next->data);p = p->next;}}bool isEmptyDLinklist(PNode pHead){if (pHead->next == NULL)return true;elsereturn false;}int lengthDLinklist(PNode pHead){PNode p = pHead;int len = 0;while (p->next != NULL) {p = p->next;len++;}return len;}int insertDLinklist(PNode pHead, int pos, int data){PNode p = NULL, pNew = NULL;if (pos > 0 && pos < lengthDLinklist(pHead) + 2) {pNew = (PNode)malloc(sizeof(Node));if (pNew == NULL) {printf("内存分配失败!\n");exit(EXIT_FAILURE);}for (int i = 1;i < pos;++i) {pHead = pHead->next;}p = pHead->next;pNew->data = data;pNew->next = p;if (p != NULL)p->pre = pNew;pNew->pre = pHead;pHead->next = pNew;return 0;}elsereturn -1;}int delDLinklist(PNode pHead, int pos){PNode p = NULL;if (pos > 0 && pos < lengthDLinklist(pHead) + 1) {for (int i = 1;i < pos;++i)pHead = pHead->next;p = pHead->next->next;free(pHead->next);pHead->next = p;if (p != NULL)p->pre = pHead;return 0;}elsereturn -1;}void freeMemory(PNode * ppHead){PNode p = NULL;while (*ppHead != NULL) {p = (*ppHead)->next;free(*ppHead);if(p != NULL)p->pre = NULL;*ppHead = p;}}
阅读全文
1 0
- 双链表的创建、遍历、测长、插入、删除、销毁
- 数据结构 图 创建 插入 遍历 删除 销毁
- 双向链表的创建、打印、求长、插入、删除、查值、清空、销毁
- 双向循环链表的创建、插入、删除、求长、查询、打印、修改、清空、销毁
- 双链表的创建、测长、打印、插入和删除
- 单链表的创建、遍历、测长、插入、删除、访问、排序、逆序
- 哈希表的创建查询插入删除销毁
- 单链表的创建、测长、打印、插入和删除
- C语言单链表的创建、插入、查找、删除、求长、排序、遍历
- 单向链表的操作:创建,删除,插入,销毁,查找
- C++实现哈希表的创建,销毁,键值插入与删除
- 单链表的创建、插入、删除、销毁以及查找中间结点
- 双链表的建立、测长、打印、删除、插入
- 自整的面试题目及代码---单链表的创建、测长、打印、删除、插入
- 双链表的创建,求长,插入,删除,打印,释放(循环和非循环)
- 链表初解(一)——单链表的创建、删除、插入、测长、排序、逆置
- 实现双向链表的创建、测长、打印、插入、删除
- 实现单向循环链表的创建、测长、打印、插入、删除及逆置
- Docker概念以及优势(推荐)
- Android中Jni入门常见异常
- HDU 1028 Ignatius and the Princess III(母函数)
- securefx连接linux后文件夹中文乱码问题解决
- js中退出语句break,continue和return 比较
- 双链表的创建、遍历、测长、插入、删除、销毁
- 实验吧-让我进去【salt加密 哈希长度拓展攻击】
- 判断一棵树是否是完全二叉树【每日一题】
- Apache Spark 内存管理详解
- Java中String和byte[]互转问题
- ES6 module export和import
- strcpy的参数
- 注册表
- SSAS对称维度与非对称维度