当前位置:网站首页>c语言简便实现链表增删改查「建议收藏」
c语言简便实现链表增删改查「建议收藏」
2022-07-05 18:33:00 【全栈程序员站长】
大家好,又见面了,我是你们的朋友全栈君。
注:单追求代码简洁,所以写法可能有点不标准。
//第一次拿c开始写数据结构,因为自己写的,追求代码量少,和学院ppt不太一样。有错请指出
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct node//定义节点
{
int data;
struct node * next;
}Node;
//函数介绍
void printlist(Node * head)//打印链表
int lenlist(Node * head)//返回链表长度
void insertlist(Node ** list,int data,int index)//插入元素
void pushback(Node ** head,int data)//尾部插入
void freelist(Node ** head)//清空链表
void deletelist(Node ** list,int data)//删除元素
Node * findnode(Node ** list,int data)//查找
void change(Node ** list,int data,int temp)//改变值
打印
void printlist(Node * head)//打印链表
{
for(;head!=NULL;head=head->next) printf("%d ",head->data);
printf("\n");//为了其他函数打印,最后换行
}
链表长度
int lenlist(Node * head)//返回链表长度
{
int len;
Node * temp = head;
for(len=0; temp!=NULL; len++) temp=temp->next;
return len;
}
插入元素
void insertlist(Node ** list,int data,int index)//插入元素,用*list将head指针和next统一表示
{
if(index<0 || index>lenlist(*list))return;//判断非法输入
Node * newnode=(Node *)malloc(sizeof(Node));//创建
newnode->data=data;
newnode->next=NULL;
while(index--)list=&((*list)->next);//插入
newnode->next=*list;
*list=newnode;
}
尾部增加元素
void pushback(Node ** head,int data)//尾插,同上
{
Node * newnode=(Node *)malloc(sizeof(Node));//创建
newnode->data=data;
newnode->next=NULL;
while(*head!=NULL)head=&((*head)->next);//插入
*head=newnode;
}
清空链表
void freelist(Node ** head)//清空链表
{
Node * temp=*head;
Node * ttemp;
*head=NULL;//指针设为空
while(temp!=NULL)//释放
{
ttemp=temp;
temp=temp->next;
free(ttemp);
}
}
删除
void deletelist(Node ** list,int data)//删除链表节点
{
Node * temp;//作用只是方便free
while((*list)->data!=data && (*list)->next!=NULL)list=&((*list)->next);
if((*list)->data==data){
temp=*list;
*list=(*list)->next;
free(temp);
}
}
查找
Node * findnode(Node ** list,int data)//查找,返回指向节点的指针,若无返回空
{
while((*list)->data!=data && (*list)!=NULL) list=&((*list)->next);
return *list;
}
改值
void change(Node ** list,int data,int temp)//改变
{
while((*list)->data!=data && (*list)->next!=NULL)list=&((*list)->next);
if((*list)->data==data)(*list)->data=temp;
}
最后测试
int main(void)//测试
{
Node * head=NULL;
Node ** gg=&head;
int i;
for(i=0;i<10;i++)pushback(gg,i);
printf("链表元素依次为: ");
printlist(head);
printf("长度为%d\n",lenlist(head));
freelist(gg);
printf("释放后长度为%d\n",lenlist(head));
for(i=0;i<10;i++)pushback(gg,i);
deletelist(gg,0);//头
deletelist(gg,9);//尾
deletelist(gg,5);
deletelist(gg,100);//不存在
printf("再次创建链表,删除节点后\n");
printlist(head);
freelist(gg);
for(i=0;i<5;i++)pushback(gg,i);
insertlist(gg,5,0);//头
insertlist(gg,5,5);
insertlist(gg,5,7);//尾
insertlist(gg,5,10);//不存在
printlist(head);
printf("找到%d\n把3变为100",*findnode(gg,5));
change(gg,3,100);
change(gg,11111,1);//不存在
printlist(head);
}
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/149821.html原文链接:https://javaforall.cn
边栏推荐
- node_exporter内存使用率不显示
- buuctf-pwn write-ups (9)
- About Estimation with Cross-Validation
- JDBC reads a large amount of data, resulting in memory overflow
- 兄弟组件进行传值(显示有先后顺序)
- Logical words in Articles
- A2L file parsing based on CAN bus (3)
- Clickhouse (03) how to install and deploy Clickhouse
- Fix vulnerability - mysql, ES
- Take a look at semaphore, the current limiting tool provided by JUC
猜你喜欢
如何写出好代码 - 防御式编程
Pytorch yolov5 training custom data
《2022中国信创生态市场研究及选型评估报告》发布 华云数据入选信创IT基础设施主流厂商!
吳恩達團隊2022機器學習課程,來啦
Memory leak of viewpager + recyclerview
让更多港澳青年了解南沙特色文创产品!“南沙麒麟”正式亮相
Maximum artificial island [how to make all nodes of a connected component record the total number of nodes? + number the connected component]
Failed to virtualize table with JMeter
Solutions contents have differences only in line separators
Share: ZTE Yuanhang 30 Pro root unlock BL magick ZTE 7532n 8040n 9041n brush mask original brush package root method Download
随机推荐
Simulate the hundred prisoner problem
MYSQL中 find_in_set() 函数用法详解
C final review
LeetCode 6111. 螺旋矩阵 IV
ConvMAE(2022-05)
第十一届中国云计算标准和应用大会 | 云计算国家标准及白皮书系列发布 华云数据全面参与编制
RPC protocol details
Image classification, just look at me!
A2L file parsing based on CAN bus (3)
快速生成ipa包
Is it safe to make fund fixed investment on access letter?
Reading notes of Clickhouse principle analysis and Application Practice (5)
lombok @Builder注解
爱因斯坦求和einsum
写作写作写作写作
buuctf-pwn write-ups (9)
让更多港澳青年了解南沙特色文创产品!“南沙麒麟”正式亮相
websocket 工具的使用
小程序 修改样式 ( placeholder、checkbox的样式)
Take a look at semaphore, the current limiting tool provided by JUC