双向链表插入与删除
来源:互联网 发布:mysql 替换 编辑:程序博客网 时间:2024/04/28 13:29
#include <stdio.h>#include <string.h>#include <stdlib.h>typedef struct node{int data;struct node *pre;struct node *next;}dnode;/*双向链表删除结点*/dnode *Del_Node(dnode *Head, int num){dnode *p1,*p2;p1 = Head;// 遍历到num结点while( num != p1->data && p1->next != NULL){p1 = p1->next;}// 找到了数据域为data的结点if(num == p1->data){if( p1 == Head )// 要删除的结点是头结点 {Head = Head->next;// 更新头结点位置及其指针域Head->pre = NULL;free(p1);}else if(p1->next == NULL)// 要删除的是最后一个结点{p1->pre->next = NULL;free(p1);}else// 中间结点{p1->next->pre = p1->pre;p1->pre->next = p1->next;free(p1);}}else{printf("%d cound not been found",num);}return Head;}/*双向链表插入结点*/dnode *Insert_Sort(dnode *Head, int num){dnode *p0,*p1;p1 = Head;p0 = (dnode *)malloc( sizeof(dnode) );p0->next = NULL;p0->pre = NULL;p0->data = num;if(p1 == NULL){Head = p0;return Head;}// 遍历while( (p0->data > p1->data) && (p1->next != NULL) ){p1 = p1->next;}if(p0->data <= p1->data){if(Head == p1)// 头结点{p0->next = p1;p1->pre = p0;Head = p0;}else {p1->pre->next = p0;p0->next = p1;p0->pre = p1->pre;p1->pre = p0;}}else// 最后一个结点{p1->next = p0;p0->pre = p1;p0->next = NULL;}return Head;}/* print list item->name */void print_list(dnode *Head){dnode *temp = Head;while(temp){printf("-------- %d\n",temp->data);temp = temp->next;}}void main(){dnode *Head = NULL;int i = 0;while( i++ < 10 ){Head = Insert_Sort(Head,i);}print_list(Head);printf("------------------------------\n");Head = Del_Node(Head,1);Head = Del_Node(Head,5);Head = Del_Node(Head,10);print_list(Head);}
0 0
- 双向链表插入与删除
- 双向链表的插入与删除
- 双向链表插入与删除
- 双向链表的插入与删除
- 双向链表插入删除
- 双向循环链表的创建,插入与删除。
- 双向链表的建立插入与删除
- 双向链表的插入与删除节点
- 双向链表实现 插入删除
- 双向链表建立、插入和删除
- 双向循环链表的插入删除
- 双向链表插入、删除操作
- 双向链表的建立插入删除
- 关于双向链表之插入+删除
- 双向链表 删除节点 插入节点
- 双向链表的创建/插入/删除
- 双向链表的插入删除操
- 双向链表插入、删除操作
- C语言数据类型32位和64位不同
- HDU 2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活
- zookeeper分布式配置管理
- 如何用js判断文件是否存在
- android之webservice开发
- 双向链表插入与删除
- Codeforces Round #263 (Div. 1) C. Appleman and a Sheet of Paper
- 嵌入式 Linux驱动虚拟地址和物理地址的映射
- hdu 3342 Legal or Not (拓扑排序)
- Android 4.4 音量调节流程分析(二)
- SLF4J和Logback日志框架详解
- Arm下使用Qt和Opencv进行图像处理的入门例程和遇到的问题
- strom中worker、task、spout/bolt、executor、component的关系
- 鼠标事件的一些问题