如何将单链表像顺序表一样的整表元素创建

时间:2021-05-04作者:klpeng分类:IT综合浏览:203评论:0

 

首先声明一个单链表结构体。

typedef struct LNode
{
    int data;
    
    struct LNode * next;


}LNode,*LinkNode;

链式存储如何一次性存储足够多的数据,顺序表是直接通过索引遍历赋值就可以直接完成。

#include<iostream>
using namespace std;
#define MaxSize 10
typedef struct SqList
{
    int data[MaxSize];
    
    int length;

}SqList;


int main()
{
    SqList Lq;  //顺序表
    Lq.length=0;
    for(int i=0;i<=10;i++)
    {
        cin>>Lq.data[Lq.length++];
    }


}

但是假如是单链表的话,则需要使链表的头结点开始遍历,每一次都指向下一个next的地址,在依次将数据赋值给当前的L->data。当然,这种思路在顺序表是可行的,因为他开辟了一片连续的地址空间,可以依次遍历。而链表不同,假如你不做处理的话,L->next根本不知道指向的是那一片空间,所以根本不可能有L=L->next这种说法。所以要想实现类似于顺序表的遍历赋值的话,是需要每次开辟一个LNode结点的空间来插入在L->next中,多次插入就出现了依次遍历的效果了。

int main()
{
    LNode L; //声明一个名为L的链表  ,L也是头结点

}

链表的插入数据的方法,常用的有两种:1.头插法,2.尾插法。

 刚好是跟顺序表做的对比,那么就实现一下,如何将开头创建顺序表的LN.data数组里面的元素添加到链表L中。

1.头插法。

每次添加的元素都插入在了头结点的下一个结点上,也就是类似逆序输出。

#include<iostream>
#include<stdlib.h>
using namespace std;
#define MaxSize 10
typedef struct SqList{
	int data[MaxSize];
	int length;
}SqList;
typedef struct LNode{
	int data;
	struct LNode *next;
}LNode,*LinkNode;
void createLNode(LNode *&L,int dataS[],int n)
{
	
	for(int i=0;i<n;i++)
	{
		LNode *k;
		k=(LNode*)malloc(sizeof(struct LNode));
		k->data = dataS[i];
		k->next=NULL;
		k->next = L->next;
		L->next = k;
	}
 } 
int main()
{
	SqList S;
	S.length=0;
	cout<<"请输入10个数字:";
	for(int i=0;i<10;i++)
	{
		cin>>S.data[S.length++];
	}
	LNode *L;
	L=(LNode *)malloc(sizeof(LNode));
	L->next=NULL;
	createLNode(L,S.data,S.length);
	L=L->next;
	cout<<"链表中的元素为:";
	while(L)
	{
		cout<<L->data<<" ";
		L=L->next; 
	}
	return 0;
}

输出结果:

如何将单链表像顺序表一样的整表元素创建

2.尾插法

在插入前需要保留头结点指针,因为尾插法每次插入会改变L所指的结点,不在总是指向头结点。

尾插法不会改变传入数据的先后数据。

#include<iostream>
#include<stdlib.h>
using namespace std;
#define MaxSize 10
typedef struct SqList{
	int data[MaxSize];
	int length;
}SqList;
typedef struct LNode{
	int data;
	struct LNode *next;
}LNode,*LinkNode;

LNode* createLNode2(int dataS[],int n)
{
	LNode *L;
	LNode *W;
	L = (LNode*)malloc(sizeof(LNode));
	
	W=L;
	for(int i=0;i<n;i++)
	{
		LNode *k;
		k=(LNode*)malloc(sizeof( LNode));
		k->data = dataS[i];
		k->next=NULL;
		L->next = k;
		L = L->next;
	}
	return W;
} 
int main()
{
	SqList S;
	S.length=0;
	cout<<"请输入10个数字:";
	for(int i=0;i<10;i++)
	{
		cin>>S.data[S.length++];
	}
	LNode *L;
	//L=(LNode *)malloc(sizeof(LNode));
	//L->next=NULL;
	//createLNode1(L,S.data,S.length);
	L=createLNode2(S.data,S.length);
	L=L->next;
	cout<<"链表中的元素为:";
	while(L)
	{
		cout<<L->data<<" ";
		L=L->next; 
	}
	return 0;
}

 

输出结果:

如何将单链表像顺序表一样的整表元素创建

尾插法和头插法的代码实现很容易,所以就没有叙述为何了。

 

打赏
文章版权声明:除非注明,否则均为彭超的博客原创文章,转载或复制请以超链接形式并注明出处。
相关推荐

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

猜你喜欢