循环双链表的删除、插入、显示
来源:互联网 发布:mysql版本区别 编辑:程序博客网 时间:2024/05/18 03:35
<span style="font-size:18px;">#include <stdio.h>#include <stdlib.h>#include <Windows.h>typedef int ItemValue;const int sleep_time = 10000;typedef struct DoubleLinkedList{ItemValue value;struct DoubleLinkedList *pre;struct DoubleLinkedList *next;} DoubleList, *pDoubleList;DoubleList *CreateCylicDoubleLinkedList(){printf("创建循环双链表!\n");DoubleList *head = (DoubleList *)malloc(sizeof(DoubleList));head->pre = head;head->next = head;DoubleList *pTemp;pTemp = head;ItemValue iValue;while (scanf("%d", &iValue) != EOF){DoubleList *p = (DoubleList *)malloc(sizeof(DoubleList));p->value = iValue;p->pre = pTemp;p->next = head;pTemp->next = p;pTemp = p;head->pre = p;}return head;}#if 0/* 访问循环双链表 */void VisitCylicDoubleLinkedList(DoubleList *dl){printf("循环双链表的输出!\n");DoubleList *pTemp;pTemp = dl;while (pTemp->next != dl){printf("%d ", pTemp->next->value);pTemp = pTemp->next;}}#endif#if 1/* 访问循环双链表 */void VisitCylicDoubleLinkedList(DoubleList *dl){printf("循环双链表的输出!\n");DoubleList *pTemp;pTemp = dl;pTemp = pTemp->next;while (pTemp != dl){printf("%d ", pTemp->value);pTemp = pTemp->next;}}#endif/* 删除元素 */void DeleteCylicDoubleLinkedList(DoubleList *L, int pos){printf("\n删除位置为%d上的元素\n", pos);if (L == NULL) {printf("链表为空!\n");Sleep(sleep_time);exit(1);}if (pos <= 0) {printf("\n删除位置不合理! 必须从第1个结点开始\n");Sleep(sleep_time);exit(1);}DoubleList *pTemp;pTemp = L;pTemp = pTemp->next;int i=1;while (pTemp != L && i!=pos){pTemp = pTemp->next;i++;}if (pTemp == L) {printf("\n删除结点不在链表中!\n");Sleep(1000);exit(1);}else {pTemp->next->pre = pTemp->pre;pTemp->pre->next = pTemp->next;}}/* 在位置i之后插入元素value */void InsertItemInDoubleLinkedList(DoubleList *L, ItemValue iValue, int pos){if (L == NULL){printf("\n插入链表为空! \n");}if (pos <= 0) {printf("\n插入位置不合理! \n");Sleep(sleep_time);exit(1);}DoubleList *pInsert = (DoubleList *)malloc(sizeof(DoubleList));pInsert->value = iValue;DoubleList *pTemp;pTemp = L;int i = 0; //插入元素前一个结点标号while (pTemp->next != L && i != pos-1){pTemp = pTemp->next;i++;}if (pTemp->next != L && i==pos-1){pInsert->next = pTemp->next;pTemp->next->pre = pInsert;pInsert->pre = pTemp;pTemp->next = pInsert;return;}if (pTemp->next == L && i==pos-1){pInsert->next = pTemp->next;pInsert->pre = pTemp;L->pre = pInsert;pTemp->next = pInsert;}else{printf("\n插入位置超出链表!\n");Sleep(sleep_time);exit(1);}}int main(){DoubleList *DL;DL = CreateCylicDoubleLinkedList();VisitCylicDoubleLinkedList(DL);DeleteCylicDoubleLinkedList(DL, 5);VisitCylicDoubleLinkedList(DL);InsertItemInDoubleLinkedList(DL, 100, 4);VisitCylicDoubleLinkedList(DL);free(DL);system("pause");return 0;}</span>
其中循环双链表的插入操作,不简练,还没想到简洁方法,能够实现:首结点、中部结点、尾部结点插入操作
0 0
- 循环双链表的删除、插入、显示
- C语言:循环双链表的创建,插入,删除
- 循环链表的创建、插入、删除、逆序、显示(C++实现)
- 双向循环链表的插入删除
- 循环链表的插入删除实现
- 双链表的创建,求长,插入,删除,打印,释放(循环和非循环)
- 单链表的创建,删除,插入,显示,排序
- 链表的建立,插入,删除,显示
- 双链表的插入 删除
- 双链表的插入删除
- 循环双链表的删除
- 循环双链表的插入和删除的一些基本操作java版
- 循环SQL删除(插入,更新)
- 写给初学数据结构的同学之(循环双链表基本操作,创建,插入,删除,排序)
- 数据结构学习(五)——循环双链表的操作之创建,插入、删除
- C/C++学习(九)循环双链表的操作之创建,插入、删除
- 再论循环链表的插入和删除操作
- 双向循环链表的插入和删除
- 黑马程序员-----总结和练习笔记
- [C语言】模拟实现库函数strstr,查找子字符串
- 关于Apache (OS 64)指定的网络名不再可用。 : AH00341: winnt_accept: Asynchronous AcceptEx failed.
- JPA基础(一):全面阐释和精彩总结JPA
- 【C语言】编写函数实现字符串旋转
- 循环双链表的删除、插入、显示
- 一起talk GDB吧(第二回:GDB单步调试)
- 【C语言】编写函数实现库函数atoi,把字符串转换成整形
- 最长上升子序列
- C++ Builder XE7 调用JAVA的JAR文件
- AFNetworking的POST方法(自带cookie)
- 关于autorelease pool一个较好的理解
- struts2 java.lang.ClassNotFoundException: org.apache.commons.lang.xwork.StringUtils
- 不要什么都想要,否则你会焦虑