C语言--链式结构表1
来源:互联网 发布:注册中文域名有价值吗 编辑:程序博客网 时间:2024/06/04 00:44
#include <stdio.h>#include <stdlib.h>//typedef int INT;//定义一个结构体的node结点用来保存,关联数据 typedef struct node_{ struct node_ *next;INT data;}node;/**尾插法 保存最后一个数据 */static node *last;/**创建头结点 */node *create_head_node(){//创建头结点 node *n = malloc(sizeof(node));n->next = NULL;//给保存最后一个结点的指针变量开辟内存 last=malloc(sizeof(node)); last=n; //初始化时,第一个结点就是尾结点 return n;}/**头插法添加结点数据 每次都添加到第一个数据结点后面,因为第一个head结点不保存数据 故而新add的数据都在第一位,即头插法 */ void add_head(node *head,INT value){//创建新的结点,给新的结点赋值 node *n = malloc(sizeof(node));n->data=value; //新结点的下一个结点指向头结点的下一个结点 :赋值规则:为避免覆盖 从空结点开始赋值; n->next=head->next; //头结点的下一个结点指向新的结点 head->next=n;} /**尾插法 */void add_foot(node *footer,INT value){//创建新的结点 并赋值 node *n = malloc(sizeof(node));n->data=value;n->next=NULL;last = n;//记录当前结点 //把新结点关联到尾结点 footer->next=n; }/**根据数据删除结点 */int delete(node *head,int value){node *last_=malloc(sizeof(node));while(head->next!=NULL){last_=head;//保存这个node head=head->next;//因为第一个头node不存储值,故而可以直接到下一个 node if(head->data==value){last_->next=head->next;free(head);return 1;}}return 0;}/**根据数据插入结点 value保证在insert_value的后面 */int insert_by_value(node *head,int insert_value,int value){while(head->next!=NULL){ head=head->next;//因为第一个头node不存储值,故而可以直接到下一个 node if(head->data==insert_value){//创建新结点node *node_new=malloc(sizeof(node));node_new->data=value;node_new->next=head->next;//新结点的下一个结点指向目标结点的下一个结点 head->next= node_new;return 1;}}return 0;}/**根据从小到大的顺序排列 */int insert_by_size(node *head,int value){//创建结点赋并值 node *node_new=malloc(sizeof(node));node_new->data=value;//保存上一个结点 node *last_=malloc(sizeof(node));while(head->next!=NULL){last_=head;//保存这个node head=head->next;if(head->data>=value){node_new->next=head;//新结点的下一个结点指向目headlast_->next=node_new;return 1;} }//如果是第一次插入 或者值比已经存在的值都大 node_new->next=NULL; head->next=node_new; return 1;}/**测试头插法 */ void *test_add_head(node *head){ add_head(head,22); add_head(head,23); add_head(head,24); add_head(head,25); add_head(head,26); add_head(head,27); } /**测试尾插法 */ void *test_add_foot(){ add_foot(last,20); add_foot(last,30); add_foot(last,40); add_foot(last,50); add_foot(last,60); add_foot(last,70); } /**测试顺序插入插法 */ void *test_insert_by_size(node *head){ insert_by_size(head,80); insert_by_size(head,30); insert_by_size(head,1000); insert_by_size(head,50); insert_by_size(head,20); insert_by_size(head,700); } /** 打印数据 */ void print_data(node *head){ while(head->next!=NULL){ head=head->next; //这里从新赋值 printf("%d ",head->data); } } int main(INT argc,char *argv[]){ node *head = create_head_node(); test_insert_by_size(head); // test_add_foot(); // test_add_head(head); // int result = delete(head,40); // printf("result=%d ",result); // insert_by_value(head,60,65); // insert_by_value(head,40,45); print_data(head);}
0 0
- C语言--链式结构表1
- C语言链式结构表2
- 线性表——链式结构(c语言实现)
- C语言数据结构-2.线性表之链式存储结构
- C语言线性表(基于链式结构)
- 线性表-链式存储结构(C语言实现)
- C语言实现线性表的链式存储结构
- 线性表的链式存储结构(C语言实现)
- 链式表- C语言
- C语言栈的链式存储结构
- 队列的链式结构C语言实现
- 栈-链式存储结构-c语言
- C语言 双向循环链表的实现和结构 链表 线性表的链式实现
- C语言 数据结构 线性表 单链表 线性表的链式存储结构之一
- 顺序表的链式结构中用C语言实现单链表的交并差运算
- 数据结构——线性表的链式结构(C语言)
- 数据结构----纯C语言实现线性表的单向链式存储结构
- 用C语言实现简单链式队列结构
- 51nod 1270 数组的最大代价
- AIM Tech Round 3 (Div. 1) C. Centroids(每个点能否删掉一条边再添加一条边使得这个点成为重心)
- AVL(平衡二叉树)(含代码)
- 51nod 1272 最大距离
- 郝斌的C语言基础 038
- C语言--链式结构表1
- 51nod 1276 岛屿的数量
- POJ 1298 史上最难的问题 3749 破译密码 G++
- C专家编程 五 声明的优先级规则
- ibatis 到 MyBatis区别
- Ubuntu 查看CPU/GPU内存使用情况
- 【Java并发】JAVA并发编程实战-读书笔记16
- 51nod 1278 相离的圆
- 洛谷 P1136 迎接仪式