一、概念
单链表是一种链式存储的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) +指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。
二、代码
1、头文件
#include<stdio.h>
#include<assert.h>
#include<string.h>
#include<stdlib.h>
2、声明
//声明结点
typedef struct Listnode
{
int data;
Listnode*next;
};
//声明链表
typedef struct List
{
Listnode head;
int size;
};
3、函数代码
//初始化
List* initlist()
{
List* list=(List*)malloc(sizeof(List)) ;//链表
list->head.next=NULL;
list->size=0;
return list;
}
//插入操作
void Zinsert(List* list,int pos,int data)
{
//判断
if(pos<0||pos>list->size)
{
pos=list->size; //优化处理
}
if(list==NULL||data==NULL)
{
return;
}
//新建结点
Listnode*newnode=(Listnode*)malloc(sizeof(Listnode));
newnode->data=data;
newnode->next=NULL;
Listnode*pcur=&(list->head);
//插入新结点
for(int i=0;i<pos;i++) //得到pos前一个结点
{
pcur=pcur->next;
}
newnode->next=pcur->next;
pcur->next=newnode;
//长度加一
list->size++;
}
//删除操作
void valuedelete(List* list,int data)
{
//判断
if(list==NULL||data==NULL)
{
return;
}
//删除
Listnode* pcur=&(list->head);
Listnode* flag=pcur->next;
while(pcur!=NULL)
{
if(flag->data==data)
{
pcur->next=flag->next;
}
pcur=pcur->next;
flag=flag->next;
}
list->size--;
}
//单链表逆置
void back(List* list)
{
//判断
if(list==NULL)
{
return;
}
//逆置
Listnode* pcur1=list->head.next;
Listnode* pcur2=NULL;
while(pcur1!=NULL)
{
Listnode* temp;
temp=pcur1;
pcur1=pcur1->next;
temp->next=pcur2;
pcur2=temp;
list->head.next=pcur2;
}
}
//打印
void myprint(List* list)
{
if(list==NULL)
{
return;
}
Listnode*pcur=list->head.next;
while(pcur!=NULL)
{
printf("%d",pcur->data);
pcur=pcur->next;
}
}
//释放链表内存
void freespace(List* list)
{
if(list==NULL)
{
return;
}
free(list);
}
4、主函数
int main()
{
List*list=initlist();
//插入
Zinsert(list,10,1);
Zinsert(list,10,2);
Zinsert(list,10,3);
//打印
myprint(list);
//换行
printf("\n");
//逆置
back(list);
myprint(list);
printf("\n");
//删除
valuedelete(list,2);
//打印
myprint(list);
//释放内存
free(list);
}
四、运行结果
来源:CSDN
作者:邀山
链接:https://blog.csdn.net/weixin_43873172/article/details/104147629