Linux下的C语言编程——双向循环链表的简单实现
2016-11-06 22:02
381 查看
下面我先贴上我的代码
#include <stdio.h> #include <stdlib.h> struct node { int num; struct node *next,*prior; }; typedef struct node Dbnode; typedef struct node *Dblink; void creat_link(Dblink *head) //创建链表 { *head = (Dblink)malloc(sizeof(Dbnode)); if(!(*head)) { printf("malloc error!\n"); exit(-1); } (*head)->next = (*head)->prior = *head;//让头节点的前驱和后继都指向自己形成一个环 } void creat_node(Dblink *newnode) //生成节点 { *newnode = (Dblink)malloc(sizeof(Dbnode)); if(!(*newnode)) { printf("malloc error!\n"); exit(-1); } } void insert_head(Dblink *head,Dblink newnode)//头插法实现创建链表 { newnode->next = (*head)->next; newnode->prior = *head; (*head)->next->prior = newnode; (*head)->next = newnode; if((*head)->prior == *head) { (*head)->prior = newnode; } } void insert_tail(Dblink *head,Dblink newnode)//尾插法 { Dblink temp = *head; while(temp->next != *head) { temp = temp->next; } newnode->prior = temp; newnode->next = temp->next; temp->next = newnode; (*head)->prior = newnode; } void display(Dblink head)//遍历链表 { Dblink temp = head->next; if((head)->next == head) { printf("empty!\n"); return ; } else { while(temp != head) { printf("sum = %d\n",temp->num); temp = temp->next; } } } void delete_node(Dblink *head, int num)//删除节点 { Dblink temp; temp = (*head)->next; while(temp->num != num && temp->next != *head) { temp = temp->next; } if(temp->num == num) { temp->prior->next = temp->next; temp->next->prior = temp->prior; free(temp); } else { printf("no such number!\n"); return; } } void clear(Dblink *head)// 将链表置空 { Dblink temp = (*head)->next; Dblink p = *head; if((*head)->next == *head) { printf("empty!\n"); return ; } else { while(temp != *head) { (*head)->next = temp->next; free(temp); temp = (*head)->next; } printf("success!\n"); } } void insert_mid(Dblink *head,Dblink newnode,int num)//中间插入从小到小插入 { Dblink temp = (*head)->next; if((*head)->next == *head) { newnode->prior = (*head); newnode->next = *head; (*head)->next = newnode; (*head)->prior = newnode; } else { while(temp->num < num && temp->next != *head) { temp = temp->next; } if(temp->next != *head) { newnode->prior = temp->prior; newnode->next = temp; temp->prior->next = newnode; temp->prior = newnode; } else { if(num > temp->num) { newnode->next = *head; newnode->prior = temp; (*head)->prior = newnode; temp->next = newnode; } else { newnode->prior = temp->prior; newnode->next = temp; temp->prior->next = newnode; temp->prior = newnode; } } } } int main()//主函数 { Dblink head; Dblink newnode; int i; int num; creat_link(&head); //下面就是挨个测试函数,有些函数先注释掉,用到时候再用 /* for(i = 0; i < 10; i++) { creat_node(&newnode); newnode->num = i; // insert_head(&head,newnode); insert_tail(&head,newnode); }*/ // display(head); /* printf("input a integer!\n"); scanf("%d",&num); delete_node(&head,num);*/ // clear(&head); for(i = 0; i < 10; i++) { creat_node(&newnode); scanf("%d",&num); newnode->num = num; insert_mid(&head,newnode,newnode->num); } display(head); return 0; }
相关文章推荐
- 利用linux下的c语言编程来简单的实现一个shell功能实现!
- Linux下的C语言编程——简单实现tcp客户端和服务器
- Linux网络编程:一个简单的正向代理服务器的实现
- Linux 网络编程基础(一) ---------------客户端/服务器的简单实现
- Linux下C语言实现简单Shell
- linux中C语言实现双向循环链表
- Linux下C语言实现的简单使用线程向FIFO里写入与读取数据的例子
- Linux编程练习 --进程间通信2--两个管道实现双向通信
- linux下C语言实现文件传输的简单实例
- c语言 双向循环链表的简单应用
- Linux 网络编程基础---------------客户端/服务器的简单实现
- 双向循环链表实现文件C语言
- Linux 网络编程基础(一) ---------------客户端/服务器的简单实现
- Linux下使用socket传输文件的C语言简单实现
- 【嵌入式Linux学习七步曲之第五篇 Linux内核及驱动编程】详解Linux内核之双向循环链表
- Linux 网络编程基础(一) ---------------客户端/服务器的简单实现
- linux网络编程:用C语言实现的聊天程序(异步通信)
- 用C语言实现的简单Web服务器(Linux)
- Linux 网络编程基础 客户端/服务器的简单实现
- minigui界面生成工具的一种简单实现方式,轻松实现Windows/linux minigui 跨平台界面编程