C语言实现双向链表删除、插入、双向输出
来源:互联网 发布:写手游脚本的软件 编辑:程序博客网 时间:2024/04/28 04:25
http://www.cnblogs.com/dyllove98/archive/2013/07/31/3228857.html
#include<cstdio>#include<cstdlib>typedef struct DoubleLinkedList{ int data; struct DoubleLinkedList *pre; struct DoubleLinkedList *next;}DlinkedList_Node;//建立链表DlinkedList_Node* createDLink(){ DlinkedList_Node *head,*p,*s; int x; head = (DlinkedList_Node*)malloc(sizeof(DlinkedList_Node)); p = head; while(1) { printf("please input the data: \n"); scanf("%d",&x); if(x != 65535) { s = (DlinkedList_Node*)malloc(sizeof(DlinkedList_Node)); s ->data = x; s-> pre = p; p->next = s; p=s; } else { printf("\n数据输入结束\n"); break; } } p->next = NULL; head = head ->next; head->pre = NULL; return head;}//顺序、反序打印链表void printDLink(DlinkedList_Node *head){ DlinkedList_Node *p,*s; p = head; printf("正序输出双向链表:\n"); while(p) { printf("%d ",p->data); s = p; p = p->next; } printf("\n 逆序输出双向链表: \n"); while(s) { printf("%d ",s->data); s = s->pre; } printf("\n \n");}//删除一个结点DlinkedList_Node* deleteDlinkedList_Node(DlinkedList_Node *head,int i){ DlinkedList_Node *p; p = head; if(p->data == i) { head = p->next; head->pre = NULL; free(p); return head; } while(p) { if(p->data == i) { p->pre->next = p->next; p->next->pre = p->pre; free(p); return head; } p = p->next; } printf("没有找到想要删除的数据\n"); return head;}//插入一个结点DlinkedList_Node* insertDlinkedList_Node(DlinkedList_Node *head,int i){ DlinkedList_Node *p,*temp; p = head; temp = (DlinkedList_Node*)malloc(sizeof(DlinkedList_Node)); temp ->data = i; if(i < p->data)//比头结点数据小,插入到链表头部 { head = temp; head->next = p;//此处p为原来的head head->pre = NULL; p->pre = head;//此处p为原来的head return head; } while(p != NULL && i > p->data)//寻找合适的插入位置 { p = p->next; } if(i < p->data)//在链表中间某处找到合适插入位置 { temp ->next = p; temp ->pre = p->pre; p ->pre->next = temp; p ->pre = temp; return head; } else//没有找到合适的位置,只有将数据插入到链表尾部 { p->next = temp; //遍历到链表尾部,p==NULL temp ->pre = p; temp ->next = NULL; return head; }}int main(){ DlinkedList_Node *head; head = createDLink(); printDLink(head); head = insertDlinkedList_Node(head,1012); head = deleteDlinkedList_Node(head,1991); printDLink(head);}/*****************************运行结果如下:please input the data:1991please input the data:1992please input the data:2013please input the data:2014please input the data:512please input the data:420please input the data:65535数据输入结束正序输出双向链表:1991 1992 2013 2014 512 420 逆序输出双向链表:420 512 2014 2013 1992 1991正序输出双向链表:1012 1992 2013 2014 512 420 逆序输出双向链表:420 512 2014 2013 1992 1012
阅读全文
0 0
- C语言实现双向链表删除、插入、双向输出
- C语言实现双向链表删除节点、插入节点、双向输出等操作
- C语言实现双向链表插入,删除
- 双向链表基本操作:删除、插入、双向输出
- C语言---双向链表的插入、删除、查找操作
- C语言---双向链表的插入、删除、查找操作
- 如何使用c语言实现双向链表的插入删除操作
- 有序双向链表的插入 C语言实现
- 双向链表实现 插入删除
- 双向链表插入删除
- 单链表,双向链表的插入,查询,创建,删除,输出
- 双向链表 C语言 (创建,插入,删除,判空,返回链表长度)
- 用c语言完成一个双向链表的创建,插入,删除
- 双向链表代码实现-C语言
- 双向链表C语言实现
- C语言实现双向链表[上]
- C语言实现双向链表
- c语言双向链表的实现
- Mybatis学习笔记-动态SQL和模糊查询
- MyBatis之解决字段名与实体类属性名不相同的冲突
- LeetCode19:Remove Nth Node From End of List
- java动态代理
- 【机器学习】集成学习总结
- C语言实现双向链表删除、插入、双向输出
- next()和nextline()区别
- 网易校招前端试卷查找点
- 函数调用堆栈
- json解析 最外层是数组 原生解析 gson解析 混合解析
- JavaScript中数组的常用方法总结
- 深度学习所需的python-学习笔记6
- Spring系列之AOP实现的两种方式
- MyBatis之多表查询