当前位置:网站首页>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
边栏推荐
猜你喜欢

第十一届中国云计算标准和应用大会 | 华云数据成为全国信标委云计算标准工作组云迁移专题组副组长单位副组长单位

About Estimation with Cross-Validation

buuctf-pwn write-ups (9)

Reptile 01 basic principles of reptile

The main thread anr exception is caused by too many binder development threads

Vulnhub's darkhole_ two

达梦数据库udf实现

U-Net: Convolutional Networks for Biomedical Images Segmentation

U-Net: Convolutional Networks for Biomedical Images Segmentation

Thoroughly understand why network i/o is blocked?
随机推荐
sample_rate(采樣率),sample(采樣),duration(時長)是什麼關系
[QNX hypervisor 2.2 user manual]6.3.2 configuring VM
小程序 修改样式 ( placeholder、checkbox的样式)
ICML2022 | 长尾识别中分布外检测的部分和非对称对比学习
RPC protocol details
Wu Enda team 2022 machine learning course, coming
The main thread anr exception is caused by too many binder development threads
Is it safe for golden sun to open an account? Can I open an account free of 5 in case?
Problems encountered in the project u-parse component rendering problems
Memory management chapter of Kobayashi coding
SAP 特征 特性 说明
Common time complexity
Solutions contents have differences only in line separators
Login and connect CDB and PDB
Logical words in Articles
怎么自动安装pythn三方库
AI Open2022|基于异质信息网络的推荐系统综述:概念,方法,应用与资源
Linear table - abstract data type
Electron installation problems
LeetCode 6111. Spiral matrix IV