当前位置:网站首页>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
边栏推荐
- Electron安装问题
- Pytorch yolov5 training custom data
- LeetCode 6111. 螺旋矩阵 IV
- LeetCode 6111. Spiral matrix IV
- Lombok @builder annotation
- Use of print function in MATLAB
- Cronab log: how to record the output of my cron script
- 7-2 keep the linked list in order
- The origin of PTS, DTS and duration of audio and video packages
- Multithreading (I) processes and threads
猜你喜欢
LeetCode 6111. Spiral matrix IV
Can communication of nano
怎么自动安装pythn三方库
图片数据不够?我做了一个免费的图像增强软件
使用JMeter录制脚本并调试
node_ Exporter memory usage is not displayed
Whether to take a duplicate subset with duplicate elements [how to take a subset? How to remove duplicates?]
About statistical power
如何写出好代码 - 防御式编程
Record a case of using WinDbg to analyze memory "leakage"
随机推荐
苹果手机炒股安全吗?打新债是骗局吗?
Writing writing writing
《2022中国信创生态市场研究及选型评估报告》发布 华云数据入选信创IT基础设施主流厂商!
Is it safe to make fund fixed investment on access letter?
Solutions contents have differences only in line separators
写作写作写作写作
RPC协议详解
Pytorch yolov5 training custom data
Is it safe to open an account and register stocks for stock speculation? Is there any risk? Is it reliable?
7-1 链表也简单fina
Personal understanding of convolutional neural network
Deep copy and shallow copy [interview question 3]
Maximum artificial island [how to make all nodes of a connected component record the total number of nodes? + number the connected component]
Whether to take a duplicate subset with duplicate elements [how to take a subset? How to remove duplicates?]
技术分享 | 接口测试价值与体系
文章中的逻辑词
Trust counts the number of occurrences of words in the file
图片数据不够?我做了一个免费的图像增强软件
@Extension, @spi annotation principle
c期末复习