写在前面:
关于“链表”的分析等,如果存在疑惑,想要探究过程,请读者参见下面 两篇 文章:
之后再回到这个页面看C语言实现“链队列”, 为提高效率在这里不再重复进行分析介绍,C++与C语言分析过程相同,两者代码实现主要区别在于“编程语法”上,读者可以对比两篇文章中的代码部分体会。
代码实现
说明:采用C语言,编译环境为DevC++。
//导入头文件
#include<malloc.h>
#include<stdio.h>
typedef struct Lnode{
int data;//数据域 (可以根据需要修改 数据域 数据类型)
struct Lnode *next;//指针域
}Lnode,*Linklist;
//逆序创建链表
void Createlist(Linklist &L){
Linklist p;
L=(Lnode *)malloc(sizeof(Lnode));//分配空间
L->next=NULL;
p=(Lnode *)malloc(sizeof(Lnode));
printf("请输入数据,以“-10000”结束:\n");
scanf("%d",&p->data);
while(p->data !=-10000){
p->next=L->next;
L->next=p;
p=(Lnode *)malloc(sizeof(Lnode));
scanf("%d",&p->data);
}
}
//输出
void Printlist(Linklist L){
printf("\n表中的数据为:\n");
Linklist p;
p=L->next;
while(p != NULL){
printf("%d ",p->data);
p=p->next;
}
printf("\n");//换行
}
//插入
void Insertlist(Linklist &L,int i,char e){
Linklist p;
Linklist s;
int k=1;
p=L->next;
while(p && k<i-1){
p=p->next;
k++;
}
s=(Lnode *)malloc(sizeof(Lnode));
s->data=e;
s->next=p->next;
p->next=s;
}
//删除
void Deletelist(Linklist &L,int i){
Linklist p;
Linklist s;
int e;
int k=1;
p=L->next;
while(p && k<i-1){
p=p->next;
k++;
}
s=p->next;
p->next=s->next;
e=s->data;
printf("被删除的数据元素为:%d\n",e);
}
//主函数
int main(){
Linklist L;
int i;
int e;
int d;
Createlist(L);
Printlist(L);
printf("第几个位置后插入元素:");
scanf("%d",&i);
printf("插入的新 数据 为:");
scanf("%d",&e);
Insertlist(L,i,e);//调用插入函数
printf("插入新字符后的表格数据如下\n");
Printlist(L);//输出线性表中的数据
printf("输入删除第几个元素:");
scanf("%d",&d);
Deletelist(L,d);//调用插入函数
printf("删除元素后表格数据如下\n");
Printlist(L);//输出线性表中的数据
}
运行结果
写在最后:
读两遍下来,如果仍然有不清楚的地方,可在评论区留言。
如果你有其他感到困惑的问题,欢迎留言。