C语言链式结构表2
来源:互联网 发布:jdk 7u80 windows x32 编辑:程序博客网 时间:2024/06/04 18:55
//单链表(线性表的链式存储)的实现#include <stdio.h>#include <stdlib.h>//定义数据类型typedef int datatype_t;//定义结构体typedef struct node{datatype_t data;struct node *next;}linklist_t;//创建一个空的单链表linklist_t *linklist_create(){linklist_t *h;h = (linklist_t *)malloc(sizeof(linklist_t));h->next = NULL;return h;}//插入数据(头插法)int linklist_insert_head(linklist_t *h, datatype_t value){linklist_t *temp = (linklist_t *)malloc(sizeof(linklist_t)); //创建一个新的结点temp->data = value; //赋值temp->next = h->next; //新创建的结点指向头结点的下一个结点h->next = temp; //头结点指向新创建的结点return 0;}//插入数据(尾插法)int linklist_insert_tail(linklist_t *h, datatype_t value){linklist_t *temp = (linklist_t *)malloc(sizeof(linklist_t));temp->data = value;while(h->next != NULL){h = h->next;}h->next = temp;temp->next = NULL;return 0;}//打印数据int linklist_show(linklist_t *h){while(h->next != NULL){h = h->next;printf("%d ", h->data);//printf("%d ", h->next->data);//h = h->next;}putchar(10);return 0;}//删除数据(头删法)datatype_t linklist_delete_head(linklist_t *h){//第一步:直接删除,不要返回值//h->next = h->next->next;//第二步:需要返回值//datatype_t value = h->next->data;//h->next = h->next->next;//第三步:需要返回值,并且需要释放linklist_t *temp = NULL;temp = h->next;datatype_t value = temp->data;h->next = temp->next;free(temp);temp = NULL;return value;} //更改数据int linklist_change_value(linklist_t *h, datatype_t old_value, datatype_t new_value){while(h->next != NULL){if(h->next->data == old_value){h->next->data = new_value;return 0;}else{h = h->next;}}printf("value is not exist\n");return -1;}//根据数据查找位置int linklist_search_value(linklist_t *h, datatype_t the_value){int pos = 0;while(h->next != NULL){if(h->next->data == the_value){return pos;}else{pos++;h = h->next;}}printf("the value is not exist\n");return 0;}//按照位置插入数据int linklist_insert_pos(linklist_t *h, int pos, datatype_t value){int i = 0;linklist_t *temp = (linklist_t *)malloc(sizeof(linklist_t));temp->data = value;while(i < pos && h->next != NULL){h = h->next;i++;}temp->next = h->next;h->next = temp;return 0;}//按照顺序插入数据int linklist_insert_sort(linklist_t *h, datatype_t value){linklist_t *temp = (linklist_t *)malloc(sizeof(linklist_t));temp->data = value;while(h->next != NULL && h->next->data < temp->data){h = h->next;} temp->next = h->next;h->next = temp;return 0;}//实现链表的翻转:让第一项指向NULL 第二项指向第一项,//第三项指向地二项,第四项指向第三项...以此类推 最后使head指向最后一项 int linklist_recover(linklist_t *head){//把头结点的下一个结点(第一个数据结点)赋值给p linklist_t *p = head->next;//定义空的q结点 linklist_t *last = NULL; //把头结点的下一个结点设置为NULL head->next = NULL;while(p != NULL)//如果数据结点不为NULL {last = p;//把p数据结点赋值给last p = p->next;//p再跳到下一个结点 last->next = head->next;//第一次赋值 last为第一个值 把其下一个结点设置为NULL //第二次赋值 last为第二个值 把其下一个结点设置为 其上一个值 printf("last->data=%d ",last->data);head->next = last;}return 0;}int main(int argc, const char *argv[]){//linklist_t *h = linklist_create();//linklist_insert_head(h, 10);//linklist_insert_head(h, 20);//linklist_insert_head(h, 30);///linklist_insert_head(h, 40);//linklist_insert_head(h, 50);//linklist_insert_head(h, 60);//linklist_show(h);//linklist_insert_tail(h, 20);//linklist_insert_tail(h, 30);////linklist_insert_tail(h, 40);//linklist_insert_tail(h, 50);//linklist_insert_tail(h, 60);//linklist_show(h);//printf("del = %d\n", linklist_delete_head(h));//linklist_show(h);//linklist_change_value(h, 30, 70);//linklist_show(h);//printf("value = 70, pos = %d\n", linklist_search_value(h, 70));//linklist_insert_pos(h, 3, 80);//linklist_show(h);//printf("*********************\n");linklist_t *h1 = linklist_create();//linklist_insert_sort(h1, 10);linklist_insert_sort(h1, 40);linklist_insert_sort(h1, 30);linklist_insert_sort(h1, 60);linklist_insert_sort(h1, 50);linklist_insert_sort(h1, 40);linklist_show(h1);// linklist_recover(h1);linklist_show(h1);return 0;}
1 0
- C语言链式结构表2
- C语言--链式结构表1
- 线性表——链式结构(c语言实现)
- C语言数据结构-2.线性表之链式存储结构
- C语言线性表(基于链式结构)
- 线性表-链式存储结构(C语言实现)
- C语言实现线性表的链式存储结构
- 线性表的链式存储结构(C语言实现)
- 链式表- C语言
- C语言栈的链式存储结构
- 队列的链式结构C语言实现
- 栈-链式存储结构-c语言
- C语言 双向循环链表的实现和结构 链表 线性表的链式实现
- C语言 数据结构 线性表 单链表 线性表的链式存储结构之一
- 顺序表的链式结构中用C语言实现单链表的交并差运算
- 数据结构——线性表的链式结构(C语言)
- 数据结构----纯C语言实现线性表的单向链式存储结构
- 用C语言实现简单链式队列结构
- 51nod 1305 Pairwise Sum and Divide
- Hdu 4008 Parent and son(给你一棵树(n<=1e5),有Q次查询,每次输入X Y,意思是以X为根,输出Y的儿子节点中节点标号最小和子树中标号最小)
- 洛谷3376 网络最大流
- JQuery插件之-----Datatables(四)render与日期转换(moment.js)
- 51nod 1315 合法整数集
- C语言链式结构表2
- Gym - 101142F Folding(折半)
- 51nod 1316 回文矩阵
- php处理我的关注和关注我的
- 51nod 1319 跳跃游戏
- Android NDK for Eclipse
- Java经典算法(四)
- 返回栈
- Cordova中设置设备锁定横屏竖屏