C语言基础—数据结构之单向循环链表和双向循环链表
2017-09-20 12:46
543 查看
数据结构之单向循环链表和双向循环链表
对于很多初学者来说,最头疼的事情莫过于不知道如何下手,俗话说的好:万事开头难。写代码就是不断的仿照别人的代码,根据自己的思路加以理解,最后形成一种编程思想。编程的路上是很艰辛的,应该说,这个世界上学什么都是很艰辛的,只要你坚持下去,总有一天你会成为大神级别,等待的只是时间问题,和你的背后付出。好了,说正题,下面是我整理的一些数据结构中的单向循环链表和双向循环链表第一章节:单向循环链表
第二章节:双向循环链表
#include #include #include //初始化空链表 typedef struct node { int data; struct node *next; }listnode, *list; //判断链表是否为空 bool is_empty(list head) { return head->next == NULL; } //初始化一个带头节点的链表 list init_list(void) { list mylist = malloc(sizeof(listnode)); //创建一个头节点 mylist->next = mylist; //单向循环链表指向头节点 mylist->next = mylist; //单向链表指向 NULL mylist->next = NULL; return mylist; } //创建新节点 list creat_node(int data) { list new = malloc(sizeof(listnode)); if(new != NULL) { new->data = data; new->next = new; //暂时没有插入链表里 } return new; } //插入节点 void insert_head(list mylist, int data) { list new_node = creat_node(data); list p = mylist; if(p == NULL || new_node == NULL) return; new_node->next = p->next; p->next = new_node; } //查找节点 list find_node(list mylist, int data) { list p = mylist; while(p->next != mylist) { if(p->next->data == data) { return p->next; } p = p->next; } } //删除节点 bool remove_node(list mylist, int data) { if(is_empty(mylist)) //如果链表为空,则返回false return false; list p = mylist; list q; while(p->next != mylist) { if((p->next)->data == data) { q = p->next; p->next = p->next->next; q->next = NULL; free(q); //当最后面的节点是我们要删除的时候 if(p->next == mylist) break; } p = p->next; } } //遍历显示链表 void show(list mylist) { if(is_empty(mylist)) return; list p = mylist; while(p->next != mylist) { p = p->next; printf("%d\t", p->data); } printf("\n"); } int main(int argc, char **argv) { list mylist = init_list(); if(mylist == NULL) { printf("创建失败!"); exit(1); } int n; while(1) { int ret = scanf("%d", &n); if(ret != 1) { break; } //创建一个新的节点 list new = creat_node(n); //将新的节点插入链表 insert_head(mylist, n); //遍历 show(mylist); } //删除节点 remove_node(mylist, n); show(mylist); }#include #include #include //初始化空链表 typedef struct node { int data; struct node *next; }listnode, *list; //判断链表是否为空 bool is_empty(list head) { return head->next == NULL; } //初始化一个带头节点的链表 list init_list(void) { list mylist = malloc(sizeof(listnode)); //创建一个头节点 if(mylist != NULL) { mylist->next = NULL; } return mylist; } //创建新节点 list creat_node(int data) { list new = malloc(sizeof(listnode)); if(new != NULL) { new->data = data; new->next = NULL; //暂时没有插入链表里 } return new; } //头插法插入节点:需要知道这个节点插入到哪一个节点P后面,需要有一个新节点 void insert_head(list mylist, int data) { list new_node = creat_node(data); list p = mylist; if(p == NULL || new_node == NULL) return; new_node->next = p->next; p->next = new_node; } //尾插法插入节点:需要知道这个节点插入到哪一个节点P后面,需要有一个新节点 void insert_tail(list mylist, int data) { list new_node = creat_node(data); list p = mylist; while(p->next != NULL) { p = p->next; } p->next = new_node; } //查找节点 list find_node(list mylist, int data) { list p = mylist; while(p->next != NULL) { if(p->next->data == data) { return p->next; } p = p->next; } } //删除节点 bool remove_node(list mylist, int data) { if(is_empty(mylist)) //如果链表为空,则返回false return false; list p = mylist; while(p->next != NULL) { if((p->next)->data == data) { list q = p->next; p->next = p->next->next; q->next = NULL; free(q); //当最后面的节点是我们要删除的时候 if(p->next == NULL) break; } p = p->next; } } //遍历显示链表 void show(list mylist) { if(is_empty(mylist)) return; list p = mylist; while(p->next != NULL) { p = p->next; printf("%d\t", p->data); } printf("\n"); } int main(int argc, char **argv) { list mylist = init_list(); if(mylist == NULL) { printf("创建失败!"); exit(1); } //判断是否为空链表‘ bool y = is_empty(mylist); if(y == true) { printf("则此链表为空链表!"); } int i; //头插法 for(i = 0;i < 5;i++) { insert_tail(mylist, i); } //遍历显示链表 show(mylist); printf("===========================\n"); //删除节点 remove_node(mylist, 1); show(mylist); }
相关文章推荐
- 【数据结构】单向链表,单向循环链表,双向循环链表
- 数据结构学习之链表(单向、单循环以及双向)(递归实现)
- 初学数据结构——单向循环链表和双向循环链表。
- 数据结构--单向循环链表、双向循环链表
- 数据结构-【链表】单向链表的逆置和双向循环链表
- 数据结构 学习笔记之:线性表——顺序表、静态链表、动态链表(单链表、双链表、单循环链表、双循环链表,链式栈、链式队列)——基础概念大扫盲!
- 数据结构-单向无头不循环链表基本实例
- ※数据结构※→☆线性表结构(list)☆============单向循环链表 链式存储结构(list circular single)(四)
- 【数据结构】单向循环链表实现
- (8) Java源码分析 ---- LinkedList (对应数据结构中线性表中的双向循环链表,JDK1.6)
- 数据结构JavaScript——双向链表、双向循环链表
- 【数据结构】-线性表-双向循环链表-1328:链表的基本操作【好题】
- 数据结构-有头双向循环链表
- 数据结构之线性结构--双向循环链表
- 小猪的数据结构辅助教程——2.7 线性表中的双向循环链表
- 数据结构 循环链表、双向链表、一元多项式
- 数据结构学习系列三-单向循环链表(c++实现且应用模板)
- ※数据结构※→☆线性表结构(list)☆============单向循环链表结构(list circular single)(四)
- 数据结构-----双向循环链表
- 数据结构基础(12) --双向循环链表的设计与实现