线性表的链式存储结构

Posted 晓乎

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线性表的链式存储结构相关的知识,希望对你有一定的参考价值。

要求:使用头插法和尾插法来分别创建两个线性表,编程实现单链表的查找、插入和删除操作的算法。

首先引入头文件,定义结构体:

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef int ElemType;

//定义节点类型
typedef struct LNode
{
	ElemType data;
	struct LNode *next;
}LNode,*LinkList;

 

(1)、创建链表

头插法:链表的逻辑顺序与结点的插入顺序相反,即逆序。从一个空表开始,反复的读入数据,生成结点放到链表中,注意这里是插入到当前链表的表头之后,如下图:

技术分享

创建方法如下:

//单链表的建立(头插法建立)
LinkList CreateLinkList_H()
{
	LNode *L;
	ElemType x;
	//申请头结点的空间
	L=(LNode *)malloc(sizeof(LNode));
	L->next=NULL;
	scanf("%d",&x);
	while(x!=-1)
	{
		LNode *p;
		p=(LNode *)malloc(sizeof(LNode));//申请新节点的空间
		p->data=x;
		p->next=L->next;
		L->next=p;
		scanf("%d",&x);
	}
	return L;
}

 

尾插法:线性表的逻辑顺序与节点的插入顺序相同,将新节点插入到当前链表的链尾上,为此必须加上一个尾指针指针p使其一直指向当前链表的尾结点。如图

技术分享

创建方法如下:

//单链表的建立(尾插法建立)
LinkList CreateLinkList_T()
{
	LNode *L,*r,*p;
	ElemType x;
	L=(LNode *)malloc(sizeof(LNode));
	L->next=NULL;
	r=L;
	scanf("%d",&x);
	while(x!=-1)
	{
		p=(LNode*)malloc(sizeof(LNode));
		p->data=x;
		p->next=r->next;
		r->next=p;
		r=p;
		scanf("%d",&x);
	}
	r->next=NULL;
	return L;
}

 

以上是关于线性表的链式存储结构的主要内容,如果未能解决你的问题,请参考以下文章

线性表中的顺序存储与链式存储

线性表的链式存储——线性表的链式存储结构

数据结构开发:线性表的链式存储结构

线性表的顺序存储结构和链式存储结构

用C语言编写链式存储结构下实现线性表的创建,插入,删除,按值查找

线性表的链式存储结构(链表)