不带表头节点的循环单向链表
来源:互联网 发布:航天信息a3软件下载 编辑:程序博客网 时间:2024/05/12 20:59
- #include<stdio.h>
- #include<stdlib.h>
- struct node
- {
- int num;
- struct node * next;
- };
- typedef struct node Node;
- typedef struct node * Link;
- void create_link(Link * head)
- {
- *head = NULL;
- }
- void insert_node_head(Link *head,Link new_node)
- {
- Link tmp;
- tmp = *head;
- if(NULL == *head)
- {
- new_node->next = new_node;
- *head = new_node;
- return;
- }
- else
- {
- while(tmp->next != *head)
- {
- tmp = tmp->next;
- }
- tmp->next = new_node;
- new_node->next = *head;
- *head = new_node;
- }
- }
- void display_node(Link head)
- {
- Link tmp;
- tmp = head;
- if(NULL == head)
- {
- printf("link is empty!\n");
- return;
- }
- while(tmp->next != head)
- {
- printf("num = %d\n",tmp->num);
- tmp = tmp->next;
- }
- printf("num = %d\n",tmp->num);
- }
- void is_malloc_ok(Link new_node)
- {
- if(new_node == NULL)
- {
- printf("malloc error!\n");
- exit(-1);
- }
- }
- void create_newnode(Link * new_node)
- {
- *new_node = (Link) malloc(sizeof(Node));
- is_malloc_ok(*new_node);
- }
- void insert_node_tail(Link *head,Link new_node)
- {
- Link tmp;
- tmp = *head;
- if(*head == NULL)
- {
- new_node->next = new_node;
- *head = new_node;
- }
- else
- {
- while(tmp->next != *head)
- {
- tmp = tmp->next;
- }
- tmp->next = new_node;
- new_node->next = *head;
- *head = new_node;
- }
- }
- void makeEmpty(Link *head)
- {
- Link tmp;
- Link head_old;
- head_old = *head;
- tmp = *head;
- if(NULL == *head)
- {
- printf("Link is empty!\n");
- return;
- }
- /*while (tmp != NULL)
- {
- *head = tmp->next;
- free(tmp);
- tmp = tmp->next;
- }*/
- while(tmp->next != head_old)
- {
- *head = (*head)->next;
- free(tmp);
- tmp = *head;
- }
- free(tmp);
- *head = NULL;
- }
- void insert_node_mid(Link *head,Link new_node,int num)
- {
- Link tmp;
- Link p;
- tmp = *head;
- p = *head;
- if(NULL == *head)
- {
- new_node->next = new_node;
- *head = new_node;
- return;
- }
- else
- {
- while((num > tmp->num) &&(tmp->next != *head))
- {
- p = tmp;
- tmp = tmp->next;
- }
- if(num <= tmp->num)
- {
- if(tmp == *head)
- {
- new_node->next = tmp;
- *head = new_node;
- }
- else
- {
- p->next = new_node;
- new_node->next = tmp;
- }
- }
- if((num > tmp->num)&&(tmp->next == *head))
- {
- tmp->next = new_node;
- new_node->next = *head;
- }
- }
- }
- void reverse_link(Link *head)
- {
- Link p1 = NULL;
- Link p2 = NULL;
- Link p3 = NULL;
- Link old_p3 = NULL;
- if(NULL == *head || (*head)->next == *head)
- {
- printf("No need reverse!\n");
- return;
- }
- else
- {
- p3 = *head;
- p2 = p3->next;
- if(p2->next == *head)
- {
- p2->next = p3;
- *head = p2;
- p3->next = *head;
- return;
- }
- p1 = p2->next;
- old_p3 = p3;
- while(p1->next != *head)
- {
- p2->next = p3;
- p3 = p2;
- p2 = p1;
- p1= p1->next;
- }
- p2->next = p3;
- p1->next = p2;
- *head = p1;
- old_p3->next = *head;
- }
- }
- int main()
- {
- Link head = NULL;
- Link new_node = NULL;
- int i;
- create_link(&head);
- for(i = 0; i < 10;i++)
- {
- create_newnode(&new_node);
- new_node->num = i;
- //insert_node_mid(&head,new_node,new_node->num);
- insert_node_head(&head,new_node);
- //insert_node_tail(&head,new_node);
- }
- display_node(head);
- //makeEmpty(&head);
- reverse_link(&head);
- display_node(head);
- return 0;
- }
0 0
- 不带表头节点的循环单向链表
- 带表头节点的单向循环链表编程
- 带表头节点的循环单向链表
- 不带表头的单向链表,带表头的单向链表,带表头的单向循环链表,带表头的双向循环链表。
- 不带表头结点的非循环单向链表
- 带表头的单向循环链表
- 不带表头结点的单向链表总结
- 带表头节点的双向循环链表编程
- 无表头节点的单向链表
- 链表(单链表,带表头的链表,单向循环链表,双向循环链表)
- 带表头的单向链表
- 带表头结点的单向链表
- 单向带表头链表中找节点
- 判断带表头的单向循环链表La是否递增
- 创建不带表头结点的单向链表,并实现各种功能
- 带表头的循环链表
- 带表头的单向链表实现(C语言)
- 不带表头节点的冒泡排序算法
- 一个准备探索这片大地的菜鸟之“”博客之旅“”~~~
- Java NIO
- document.write和innerHTML的区别
- python数据结构学习笔记-2016-11-11-01-递归
- 在mfc中利用opencv打开摄像头并显示在窗口上
- 不带表头节点的循环单向链表
- 【数据结构与算法】选择排序
- 适用于计算机学院同学的作业目录管理系统
- PHP面向对象
- 网站重构
- Iframe详解
- C++ 中报LINK:fatal error LNK1104 :无法打开文件XXX.lib
- 在IDEA下,使用maven的mybatis-generator-maven-plugin插件自动生成实体类
- 使用百度音乐盒API接口实现音乐播放器