@Adrian
1、数据元素本身,其所在的区域称为数据域;
指向直接后继元素的指针,所在的区域称为指针域;
#include <stdio.h>
#include <stdlib.h>
//声明结点结构
typedef struct Link{
int elem;//存储整形元素
struct Link *next;//指向直接后继的元素的指针
}link;
//创建链表的函数
link *initLink(){
link *p=(link*)malloc(sizeof(link));//创建一个头结点
link *temp=p;//声明一个指针指向头结点,用于遍历链表
//生成链表
for(int i=1;i<5;i++){
//创建结点并初始化
link *a=(link*)malloc(sizeof(link));
a->elem=i;
a->next=NULL;
//建立新结点与直接前驱结点的逻辑关系
temp->next=a;
temp=temp->next;
}
return p;
}
//插入元素
//p为原链表,elem表示的新数据元元素,add表示新元素要插入的位置
link * insertElem(link *p,int elem,int add){
link *temp=p;//创建临时结点
//首先要找到要插入位置的结点
for(int i=1;i<add;i++){
temp=temp->next;
if(temp==NULL){
printf("插入位置无效\n");
return p;
}
}
//创建插入结点c
link * c =(link*)malloc(sizeof(link));
c->elem=elem;
c->next=temp->next;
temp->next=c;
return p;
}
//链表删除元素
//p为原链表,add为要删除的元素的值
link*delElem(link*p,int add){
link*temp=p;//创建临时结点
//遍历到被删除结点的上一个结点
for(int i=1;i<add;i++){
temp=temp->next;
if(temp->next==NULL){
printf("没有该结点\n");
return p;
}
}
link*del=temp->next;//单独设置一个指针指向被删除的结点,以防止丢失。
temp->next=temp->next->next;//删除某个结点的方法就是更改前一个结点的指针域
free(del);//手动释放该结点,防止内存泄漏
return p;
}
//链表查找元素
//p为原链表,elem表示被查找的元素
int selectElem(link*p,int elem){
//新建一个指针t,初始化为头指针p
link*t=p;
int i=1;
//由于头结点的存在,因此while中的判断为t->next
while(t->next){
t=t->next;
if(t->elem==elem){
return i;
}
i++;
}
//程序执行至此处,表示查找失败
return -1;
}
//链表更新的元素
link*amendElem(link*p,int add,int newElem){
link*temp=p;
temp=temp->next;//在遍历之前吗,temp指向首元结点
//遍历到待更新结点
for(int i=1;i<add;i++){
temp=temp->next;
}
temp->elem=newElem;
return p;
}
void display(link*p)
{
link*temp=p;//将temp指针重新指向头结点
//只要temp指针指向的结点的next不是NULL,就至执行输出语句。
while(temp->next){
temp=temp->next;
printf("%d ",temp->elem);
}
printf("\n");
}
int main()
{
//初始化链表(1,2,3,4)
printf("初始化链表为:\n");
link*p=initLink();
display(p);
printf("在第4个的位置插入元素5:\n");
p=insertElem(p,5,4);
display(p);
printf("删除元素3:\n");
p=delElem(p,3);
display(p);
printf("查找元素2的位置为:\n");
int address=selectElem(p,2);
if(address == -1){
printf("没有该元素");
}else{
printf("元素2的位置为:%d\n",address);
}
printf("更改第3的位置上的数据7:\n");
p=amendElem(p,3,7);
display(p);
return 0;
}
来源:CSDN
作者:PIG_先生
链接:https://blog.csdn.net/qq_43228581/article/details/104003447