数据结构笔记二(20120819)
来源:互联网 发布:云平台软件 编辑:程序博客网 时间:2024/04/27 20:35
数据结构笔记二(20120819)
/* * * wuxiuwen * 20120821 * 双向链表的创建,删除节点,插入节点,链表排序,节点的倒序输出, * */#include<stdio.h>#include<stdlib.h>typedef struct node{int data;struct node *next;struct node *front;}DNode;void creatlist(DNode **);void outputlist(DNode *);void freelist(DNode **);DNode *Getnode(int);DNode *insertlist_node(DNode *,DNode *);DNode *rm_listnode(DNode *,DNode *);DNode *sort_listnode(DNode *);DNode *reverse_list(DNode *);int main(){DNode *head =NULL;DNode *pnew=NULL;creatlist(&head);printf("创建的节点是:\n");outputlist(head);printf("排序结果如下:\n");head = sort_listnode(head);outputlist(head);pnew = Getnode(5);printf("插入data为%d到有序序列为:\n",5);head = insertlist_node(head,pnew);outputlist(head);printf("删除增加的节点:\n");head = rm_listnode(head,pnew);outputlist(head);/*head = reverse_list(head);printf("倒序输出链表为:\n");outputlist(head);*/freelist(&head);return 0;}DNode *reverse_list(DNode *head){DNode *headnew =NULL;DNode *p1 = NULL;DNode *p2 = NULL;DNode *p3 = NULL;headnew = (DNode *)malloc(sizeof(DNode));headnew->next =headnew->front =NULL;p2 = headnew;head = head ->next;if(head ==NULL){return head;}while(head !=NULL){p1 = head ;head = head ->next;}headnew = headnew->next;while(p1 != NULL){p3 = p1;p3 ->next = NULL;p3 ->front = NULL;p1 = p1->front;p2->front = headnew;p2->next = NULL;headnew->next=p2; }return p2;}DNode *sort_listnode(DNode *head){DNode *p1=NULL;DNode *p2=NULL;DNode *headnew = NULL;headnew = (DNode *)malloc(sizeof(DNode));headnew->next =headnew->front =NULL;p2 = headnew;head = head ->next;while(head !=NULL){p1 = head;head = head ->next;p1 ->next = NULL;headnew = insertlist_node(headnew,p1);} return p2;}DNode *rm_listnode(DNode *head,DNode *pdel){//查询链表中有这个节点pdel,有的话删除掉DNode *p = head;if(head ==NULL && head ->next ==NULL){return head;}while(p !=NULL && p!=pdel){p=p->next;}if(p ==NULL && p !=pdel){printf("no!");return head;}if(p == pdel && p ->next==NULL){p->front->next =NULL;}if(p == pdel && p->next!=NULL){p->front->next=p->next;p->next->front=p->front;}free(pdel);return head;}DNode *insertlist_node(DNode *head,DNode *pnew) //插入的队列是从小到大的有序序列{DNode *p1=head;DNode *p2=NULL;head = head ->next;if(head ==NULL){pnew ->front = p1;pnew ->next = NULL;p1->next=pnew;return p1;}while(head != NULL){if(head->data < pnew->data){p2 =head;head = head->next;}else break;}if(head==NULL){pnew->front=p2;pnew->next = NULL;p2->next = pnew;}if(head != NULL && head->data >= pnew->data){pnew->front = p2; pnew->next = head; p2->next = pnew; head->front=pnew;}return p1;}DNode *Getnode(int num){DNode *p=(DNode *)malloc(sizeof(DNode));p->data = num;p->next =NULL;return p;}void creatlist(DNode **phead){DNode *pnew=NULL;int num;DNode *pend =NULL;DNode **head;*phead = (DNode *)malloc(sizeof(DNode));(*phead)->next =(*phead)->front =NULL;head = &((*phead)->next);scanf("%d",&num);while(num !=0){pnew = Getnode(num);if(*head ==NULL){*head = pend = pnew;pnew->front = *phead;}else{pend->next = pnew;pnew->front = pend;pend = pnew;}scanf("%d",&num);} }void outputlist(DNode *head){DNode *p = NULL;head = head ->next;while(head !=NULL){printf("%d ",head->data);p = head;head = head ->next;}/*printf("\n*******逆向输出******\n");while(p->front !=NULL){printf("%d ",p->data);p = p->front;}*/printf("\n");}void freelist(DNode **head){DNode *pdel =NULL;printf("\n释放空间的链表为:\n");while(*head !=NULL){pdel = *head;*head = (*head)->next;printf("%d ",pdel ->data);free(pdel);}printf("\n");}
*********************************************************************************************************
程序运行结果:
[root@localhost wuxiuwen]# ./a.out
2 6 9 0
创建的节点是:
2 6 9
排序结果如下:
2 6 9
插入data为5到有序序列为:
2 5 6 9
删除增加的节点:
2 6 9
释放空间的链表为:
0 2 6 9
[root@localhost wuxiuwen]#
****************************************************************************************************************
- 数据结构笔记二(20120819)
- 数据结构学习笔记二
- 数据结构笔记二(20120825)
- 数据结构学习笔记(二)
- 数据结构笔记二
- 数据结构学习笔记 (二)
- 数据结构学习笔记(二)
- 数据结构与算法笔记:二
- 数据结构复习笔记(二)
- 数据结构学习笔记(二)
- 数据结构学习笔记(二)
- 数据结构学习笔记(二)
- 数据结构学习笔记(二)
- 严蔚敏数据结构学习笔记二.线性表
- 数据结构学习笔记二 顺序表
- 数据结构笔记 第一章基础概念(二)
- OpenCV学习笔记(二)—IplImage数据结构
- 数据结构学习笔记(二)各种排序
- C++中智能指针的设计和使用
- 人件--读书笔记5
- 如何保证高品质的WLAN网络建设
- 腾讯面试题
- maven-06 依赖
- 数据结构笔记二(20120819)
- 详解java类的生命周期
- IOS5.11安装Metasploit
- 我的NBA偶像——小皇帝(勒布朗詹姆斯)和我有着同样生日哦
- maven-02简单构建
- Shell中[和[[的异同
- 从头开始构建一个web即时通讯系统 - 客户端 - flash socket
- CodeSmith中SchemaExplorer类API文档1
- 在Drupal 7中如何实现树形目录?