c语言_数据结构_单链表
来源:互联网 发布:实战linux编程精髓pdf 编辑:程序博客网 时间:2024/06/04 17:55
单链表的建立:
#include <stdio.h> #include <stdbool.h>#include <stdlib.h> #include <unistd.h>typedef int datatype; //声明结点,结点包括元素数据以及指针域。typedef struct node{ datatype data; struct node *next;}linknode,*linklist; //初始化链表。1)分配内存;2)将头节点指针域指向空,该指向也是链表遍历的判断依据;3)返回头节点地址。linklist init_list(void){ linklist head = (linklist)malloc(sizeof(linknode)); head->next = NULL; return head;} //插入结点。1)新建结点,对于链表来说,不同于顺序表一次性将总表长的内存分配完毕,因此在每次新建//结点都该给新结点newnode分配内存;2)将插入的数据赋予newnode的data域;3)定义中间结点p,p主要在//遍历过程中起作用,初始化p等于head头结点进行遍历,当p->next指向NULL时,说明当前结点为末结点,//否则继续遍历下一结点;4)在找到末结点后,将末结点p->next指针指向新结点newnode,新结//点newnode->next指向NULL,此时完成新结点的插入,新结点newnode成为末结点。bool insert_list(linklist head,datatype n){ linklist newnode = (linklist)malloc(sizeof(linknode)); newnode->data = n; linklist p = head; while(p->next !=NULL) p = p->next; newnode->next = p->next; p->next = newnode; return true;}//删除结点。对链表遍历,当找到对应元素结点q时,记录其直接前驱结点p,将前驱结点的next域p->next指向//q的直接后继结点p->next->next,释放q内存,完成删除工作。bool remove_list(linklist head,datatype n){ linklist p = head; linklist q; while(p->next != NULL) { if(p->next->data == n) { q = p->next; p->next = p->next->next; free(q); return true; } p = p->next; } printf("remove failed\n"); return false;} //打印结点。void show_list(linklist head){ linklist p = head; while(p->next != NULL) { p = p->next; printf("%d\t",p->data); } printf("\n");} //链表逆转。依次将结点a0,a1,a2,……,an-1移到头结点作为其直接后继结点。如图:
void revert_list(linklist head){ linklist p = head->next; linklist q; head->next = NULL; while(p != NULL) { q = p->next; p->next = head->next; head->next = p; p = q; }} //测试。输入正数则插入结点,负数则删除对应结点,最后逆转链表。int main(void){ datatype n; linklist l = init_list(); while((scanf("%d",&n)) == 1) { if(n > 0) { if((insert_list(l,n))) show_list(l); else printf("insert failed\n"); } else { if((remove_list(l,-n))) show_list(l); else printf("remove failed\n"); } } revert_list(l); printf("revert linklist:\n"); show_list(l); return 0;}
0 0
- c语言_数据结构_单链表
- c语言_数据结构_顺序表
- 【C语言】树_数据结构_练习
- 【C语言】图_数据结构_练习
- 【C语言】查找_数据结构_练习
- c语言_单链表
- 数据结构_两个有序单链表归并C语言源代码
- c语言_数据结构_单向循环链表
- c语言_数据结构_双向循环链表
- c语言_数据结构_双向循环链表
- 数据结构C语言_员工信息
- 数据结构_归并排序C语言源代码
- 数据结构_6:树:C语言_基本概念
- R语言_数据结构
- C语言数据结构_链表的实现
- 数据结构_顺序表相关操作C语言源代码
- 数据结构_6:树:C语言_顺序存储
- 数据结构_6:树:C语言_链式存储
- Linux变量与samba服务器、nfs服务器搭建
- C语言基础补充
- C语言基础补充2
- C语言基础补充3
- c语言_数据结构_顺序表
- c语言_数据结构_单链表
- c语言_数据结构_单向循环链表
- c语言_数据结构_双向循环链表
- 在Keil中使用JLink调试S5PV210配置方法
- make menuconfig/.config/Kconfig解析
- DELPHI中MessageBox的用法
- poj 1089 贪心之区间覆盖问题
- Android-通讯录:获取短信会话列表(包括群发的)
- 素材