数据结构(单向链表)

server/2024/10/22 17:17:40/

单向链表代码

#ifndef _LINK_H_#define _LINK_H_typedef int DataType;typedef struct node
{DataType data;struct node *pnext;
}Link_Node_t;typedef struct link
{Link_Node_t *phead;int clen;
}Link_t;extern Link_t *link_creat();
extern int push_link_head(Link_t *plink, DataType data);
extern int print_link_all(Link_t *plink);
extern int push_link_tail(Link_t *plink, DataType data);
extern int pop_link_head(Link_t *plink);
extern int pop_link_tail(Link_t *plink);
extern Link_Node_t * find_link_data(Link_t *plink, DataType data);
extern int change_link_data(Link_t *plink, DataType des, DataType src);
extern int delall_link_data(Link_t *plink);
extern Link_Node_t* med_link_data(Link_t *plink);
extern Link_Node_t* find_link_tail_k(Link_t* plink, int k);
extern int del_k_link(Link_t *plink, int k);#endif

#include "link.h"
#include <stdio.h>
int main(void)
{int ret = 0;Link_Node_t* find = NULL;Link_t *plink = link_creat();if(plink ==  NULL){printf("link_creat fail");return -1;}push_link_head(plink, 1);push_link_head(plink, 2);push_link_head(plink, 3);push_link_head(plink, 4);push_link_head(plink, 5);push_link_tail(plink, 6);push_link_tail(plink, 7);push_link_tail(plink, 8);push_link_tail(plink, 9);print_link_all(plink);pop_link_head(plink);pop_link_tail(plink);print_link_all(plink);find = find_link_data(plink, 10);if(NULL == find){printf("没找到\n");}else{printf("index = %p\n", find);}ret = change_link_data(plink, 3, 50);if(ret == 1){printf("没有需要修改的数据\n");}print_link_all(plink);//delall_link_data(plink);/*printf("清除\n");plink = link_creat();push_link_tail(plink, 6);print_link_all(plink);
*/find = med_link_data(plink);if(NULL == find){printf("空链表\n");}else{printf("index = %p\n", find);}find = find_link_tail_k(plink, 4);if(NULL == find){printf("没找到\n");}else{printf("index = %p\n", find);}ret = del_k_link(plink, 4);if(-1 == ret){printf("不存在该节点\n");}print_link_all(plink);return 0;
}

#include "link.h"
#include <stdlib.h>
#include <stdio.h>//创建头部
Link_t *link_creat()
{Link_t *plink = (Link_t *)malloc(sizeof(Link_t));if(NULL == plink){perror("malloc fail");return NULL;}plink->phead = NULL;plink->clen = 0;return plink;
}//头插
int push_link_head(Link_t *plink, DataType data)
{Link_Node_t *pnode = (Link_Node_t *)malloc(sizeof(Link_Node_t));if(NULL == pnode){perror("malloc fail");return -1;}pnode->data = data;pnode->pnext = NULL;pnode->pnext = plink->phead;plink->phead = pnode;plink->clen++;return 0;
}
//判空
int is_empty_link(Link_t *plink)
{return NULL == plink->phead;
}//尾插
int push_link_tail(Link_t *plink, DataType data)
{Link_Node_t *pnode = (Link_Node_t *)malloc(sizeof(Link_Node_t));if(NULL == pnode){perror("malloc fail");return -1;}pnode->data = data;pnode->pnext = NULL;Link_Node_t *p = plink->phead;if(is_empty_link(plink)){plink->phead = pnode;}else{while(p->pnext != NULL){p = p->pnext;}p->pnext = pnode;}plink->clen++;return 0;
}//遍历
int print_link_all(Link_t *plink)
{Link_Node_t *p = plink->phead;while(p != NULL){printf("%d ", p->data);p = p->pnext;}putchar('\n');return 0;
}//头删
int pop_link_head(Link_t *plink)
{int i = 0;if(is_empty_link(plink)){i = 0;    }else{Link_Node_t *p = plink->phead;plink->phead = p->pnext;p->pnext = NULL;free(p);plink->clen--;i = 1;}return i;
}//尾删
int pop_link_tail(Link_t *plink)
{int i = 0;if(is_empty_link(plink)){i = 0;}else{if(plink->clen == 1){pop_link_head(plink);}else{Link_Node_t *p = plink->phead;while(p->pnext->pnext != NULL){p = p->pnext;}free(p->pnext);p->pnext = NULL;i = 1;plink->clen--;}}return i;
}
//查找对应数据的节点地址
Link_Node_t * find_link_data(Link_t *plink, DataType data)
{Link_Node_t *p = plink->phead;while(p != NULL){if(p->data == data){return p;}p = p->pnext;}return NULL;
}
//改变对应数据
int change_link_data(Link_t *plink, DataType des, DataType src)
{Link_Node_t *p = plink->phead;while(p != NULL){if(p->data == des){p->data = src;return 0;}p = p->pnext;}return 1;
}
//清楚
int delall_link_data(Link_t *plink)
{while(1){if(is_empty_link(plink)){free(plink);break;}else{pop_link_head(plink);}}return 0;
}Link_Node_t* med_link_data(Link_t *plink)
{printf("clen = %d\n", plink->clen);int med = (plink->clen / 2) + 1;int num = 1;Link_Node_t *p = plink->phead;if(plink->clen == 0){return NULL;}while(p != NULL){if(num == med){printf("data = %d\n", p->data);return p;}p = p->pnext;num ++;}return NULL;
}Link_Node_t* find_link_tail_k(Link_t* plink, int k)
{int num = 0;if(k > plink->clen){return NULL;}int find_k = plink->clen - k;printf("num = %d  k = %d\n", num, k);Link_Node_t *p = plink->phead;while(p != NULL){if(num == find_k){printf("data = %d\n", p->data);return p;}++num;p = p->pnext;}return NULL;
}int del_k_link(Link_t *plink, int k)
{int num = 1;if(k > plink->clen){return -1;}else if(k == 1){pop_link_head(plink);return 0;}else if(k == plink->clen){pop_link_tail(plink);return 0;}Link_Node_t* p = plink->phead;while(p != NULL){if(num == k - 1){Link_Node_t *p1 = p->pnext;p->pnext = p->pnext->pnext;free(p1);}++num;p = p->pnext;}return 0;
}

http://www.ppmy.cn/server/111382.html

相关文章

Oracle rac 修改vip scan ip

背景介绍&#xff1a; 现在有个需求&#xff0c;主机的物理机迁移&#xff0c;为了让业务改动最小&#xff0c;要修改新主库的VIP & SCAN IP&#xff0c;同网段的修改vip & scan比较简单 ps: 过段时间要修改物理机的网段&#xff0c;届时再更新&#xff01; 修改vip …

第十五届北京青年相声节宣传片发布

第十五届北京青年相声节宣传片&#xff0c;围绕相声演员的四个基本功&#xff1a;说、学、逗、唱&#xff0c;搭建四个生活场景&#xff0c;编创四个微短故事&#xff0c;演绎四组人物关系&#xff0c;向大众普及“相声就在我们身边”的深刻内涵。

ES6中是如何实现模块化

前端模块化的理解 前端模块化是一种将复杂代码按功能的不同划分成不同模块进行单独维护和管理的开发方式。这种方式旨在提高开发效率、降低维护成本&#xff0c;并增强代码的可重用性、可读性和可维护性。模块化的核心思想是将系统分割成多个独立的功能部分&#xff0c;每个部…

C语言的头文件有哪些使用注意事项

在C语言中&#xff0c;头文件&#xff08;.h文件&#xff09;用于声明函数、变量、宏和数据类型&#xff0c;以便在多个源文件中共享和重用代码。正确使用头文件可以提高代码的可维护性和可读性。以下是使用头文件时的一些注意事项&#xff1a; 1. 避免重复包含 重复包含头文…

ubuntu linux搭建lvgl

记录一下ubuntu linux搭建 lvgl的过程 本地环境:ubuntu 16.04 ubuntu lvgl sdl2 1 获取源码 git clone https://github.com/lvgl/lv_port_linux.git cd lv_port_linux/ git submodule update --init --recursive查看分支: git branch -a 我选择的是9.2(master分支一直在变动…

视联动力数字科技新成果闪耀2024数博会

在2024年的8月28日至30日&#xff0c;贵阳举办的中国国际大数据产业博览会上&#xff0c;视联动力带来了一系列引人注目的技术和创新应用。 这场为期三天的展览会展示了公司在数字经济发展领域的最新成就&#xff0c;特别是国产通信协议技术方面的进展。 视联动力重点展出了算…

5G BWP

5G的关键概念&#xff1a;BWP&#xff08;Bandwidth Part&#xff09;,这是5G区别于4G的最关键概念之一&#xff0c;可谓无线资源的“切片”&#xff0c;可使5G灵活支持各种场景的各类终端。 一、5G频谱带宽比4G大多少&#xff1f; 话说5G和4G的一大区别&#xff0c;就是载波频…

react中关于token的两个场景

场景一 在react项目中&#xff0c;路由跳转前需判断是否存在token&#xff0c;有则正常跳转&#xff0c;没有则去登录页面。 实现 这里使用的是localstorage存储token&#xff08;也可以使用redux管理token&#xff09; // src\components\AuthRoute.js // 封装高阶组件 //…