0
点赞
收藏
分享

微信扫一扫

C语言实现--逆序创建链表(头插法)

写在前面:


        关于“链表”的分析等,如果存在疑惑,想要探究过程,请读者参见下面 两篇 文章

                                  “链表(详解)- C++(顺序创建链表-尾插法)”

                                  “链表(详解)- C++(逆序创建链表-头插法)”

        之后再回到这个页面看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);//输出线性表中的数据
}

运行结果

 

写在最后:

        读两遍下来,如果仍然有不清楚的地方,可在评论区留言。

        如果你有其他感到困惑的问题,欢迎留言。

举报

相关推荐

0 条评论