和菜鸟一起学数据结构之简单单链表实现
来源:互联网 发布:painter软件和sai 编辑:程序博客网 时间:2024/06/11 04:30
国庆已经结束一周了,工作也有一周了。迷迷糊糊,sdk和文档也写完了,bootloader中加上spi flash的读写功能也实现了。但是心里空空的,不知为什么,开心不起来。这周,让我明白了很多很多,自己的路还是依然选择继续走下去,不管怎样。总会好的,一切都会好的。
周六依旧来到公司,与往日不同的是,我不再工作了,我要学习自己想要学习的东西了。学过得数据结构差不多都忘光了,开始整理整理。
以前一直都用现成的c++的STL来实现各种数据结构的,但是这样只会用,学不到数据结构的真谛。重新拿起严蔚敏老师的书,还是从最最简单的链表开始吧。
首先还是看下自己写的代码吧:
#include <stdio.h>#include <stdlib.h>#include <string.h> typedef struct list{ int data; struct list *next; }List; List* list_create(void);void list_insert(List *head, int value);void list_delete(List *head, int value);void list_destroy(List *head);void list_order(List *head);void list_print(List *head); int main(void){ List *head; int i; head = list_create(); for(i = 1; i <= 5 ;i++) list_insert(head, i); list_print(head); printf("\n"); list_order(head); list_print(head); printf("\n"); list_delete(head, 3); list_print(head); printf("\n"); list_destroy(head); return 0;} /* 创建链表头。*/List* list_create(void){ List *head; head = (List *)malloc(sizeof(List)); head->next = NULL; return head;} /* 在链表尾部插入一个值为value的节点*/void list_insert(List *head, int value){ List *stu, *pos; pos = head; while(pos->next != NULL) pos = pos->next; stu = (List *)malloc(sizeof(List)); stu->data = value; stu->next = NULL; pos->next = stu; pos = pos->next; } /* 删除链表中值为value的节点*/ void list_delete(List *head, int value){ List *pos1, *pos2; int flag = 1; pos1 = head; while(pos1->next != NULL) { if(pos1->next->data == value) { pos2 = pos1->next; pos1->next = pos2->next; free(pos2); flag = 0; break; } pos1 = pos1->next; } if(flag) { printf("No emlement\n"); } } /* 打印整个链表的节点的值*/void list_print(List *head){ int i = 0; List *pos; pos = head; if(pos->next == NULL) { printf("Empty list\n"); return; } while(pos->next != NULL) { pos = pos->next; printf("%d ", pos->data); } printf("\n");} /* 释放链表*/void list_destroy(List *head){ List *pos1, *pos2; pos1 = head; if(pos1->next == NULL) { printf("Empty list\n"); return; } while(pos1->next != NULL) { pos2 = pos1; pos1 = pos1->next; free(pos2); } free(pos1);} /* 从大到小排序*/void list_order(List *head){ List *pos1, *pos; List *tail1, *pri1, *mid1; List *tail2, *pri2, *mid2; pos = head; if(pos->next == NULL) { printf("Empty list\n"); return; } while(pos->next != NULL) { pri1 = pos; mid1 = pri1->next; tail1 = mid1->next; pos1 = pos; while(pos1->next != NULL) { pri2 = pos1; mid2 = pri2->next; tail2 = mid2->next; if(mid1->data < mid2->data) { mid1->data ^= mid2->data; mid2->data ^= mid1->data; mid1->data ^= mid2->data; } pos1 = pos1->next; } pos = pos->next; }}
比较简单就不多做讲解了。
- 和菜鸟一起学数据结构之简单单链表实现
- 和菜鸟一起学数据结构之简单静态链表实现
- 和菜鸟一起学OK6410之最简单字符驱动
- 和菜鸟一起学linux之input系统简单实例
- 和小强一起学数据结构之简单选择排序
- 和菜鸟一起学算法之递归和分治简单实例
- 和菜鸟一起学OK6410之最简单驱动模块hello world
- 和菜鸟一起学证券投资之股市简单财务分析
- 和菜鸟一起学linux之do{...}while(0)的简单实例
- 和菜鸟一起学linux之双向链表list head的简单实例
- 和菜鸟一起学linux之GCC内嵌汇编简单实例
- 和菜鸟一起学c之回调函数简单实例
- 和菜鸟一起学linux之我的vim简单配置
- 和菜鸟一起学android4.0.3源码之传感器的简单移植
- 和菜鸟一起学android4.0.3源码之硬件gps简单移植
- 和菜鸟一起学android4.0.3源码之wifi的简单分析
- 和菜鸟一起学android4.0.3源码之wifi direct的简单分析
- 和菜鸟一起学android4.0.3源码之硬件gps简单移植
- 【运维理论经典】大型网站运维探讨和心得(运维工程师必备)
- vxsim 配置虚拟网卡(进行网络编程,配置方法增加了说明)
- oracle cascade用法
- 郭伯雄:抓紧攻关重大武器研发取得更多突破-郭伯雄-重大武器装备-突破
- C#重绘TabControl的Tabpage标签,添加图片及关闭按钮
- 和菜鸟一起学数据结构之简单单链表实现
- VS10x Code Map安装
- 语音识别总结
- 如何安裝Quartus II 8.0 for Linux? (SOC) (Quartus II) (Linux)
- BPM介绍
- 采用路径标示扁平化树设计方式
- Linux与unix shell编程指南
- ArrayList和数组间的相互转换
- 【SVN版本管理必备】SVN merge 三种方式