单链表的整表创建

1、顺序存储结构的创建,其实就是一个数组的初始化,即声明一个固定类型和大小的数组并赋值的过程。

而单链表和顺序存储结构就不一样,它不像顺序存储结构那么几种,它可以很散,是一种动态结构。对于每个链表来说,

它所占用空间的大小和位置是不需要预先分配划定的,可以根据系统的情况和实际需求即时生成。

所以创建单链表的过程就是一个动态生成链表的过程。即从“空表”的初始状态起,依次建立各元素结点,并逐个插入链表。

---- 单链表整表创建的算法思路:

-- 1)声明一结点p和计数器变量 i ;

-- 2)初始化一空链表L;

-- 3)让L的头结点的指针指向NULL,即建立一个带头结点的单链表;

-- 4)循环:生成一新结点赋值给p     随机生成一数字赋值给p的数据域p->data   将p插入到头结点与前一新结点之间。

实现代码算法如下:

#include <ctime>
#include <iostream>
using namespace std;
typedef int Elemtype; 
typedef struct node
{
	Elemtype data;
	struct node *link;
} Node,*LinkList;
//typedef struct node *LinkList;
//typedef Node *LinkList;
/* 随机产生n个元素的值,建立带表头结点的单链线性表L(头插法)*/
void CreateList(LinkList *L,int n)
{
	LinkList p;
	int i;
	srand((unsigned)time(0)); //初始化随机数种子
	*L = (LinkList)malloc(sizeof(Node));
	(*L)->link = NULL;  //先建立一个带头结点的单链表
	for(i=0;i<n;i++)
	{
		p = (LinkList)malloc(sizeof(Node));
		p->data = rand()%100+1;		//随机生成100以内的数字
		p->link = (*L)->link;		//指向第一个结点
		(*L)->link = p;			//插入到表头
	}
}

这段算法代码里,我们其实用的是插队的办法,就是始终让 新结点在第一的位置。可以把这种算法简称为 头插法

也可以每次把新结点都插在终端结点的后面,按照排队时的正常思维,所谓的先来后到,这种算法称之为尾插法

实现代码算法如下:

#include <ctime>
#include <iostream>
using namespace std;
typedef int Elemtype; 
typedef struct node
{
	Elemtype data;
	struct node *link;
} Node,*LinkList;
//typedef struct node *LinkList;
//typedef Node *LinkList;
/* 随机产生n个元素的值,建立带表头结点的单链线性表L(尾插法)*/
void CreateList(LinkList *L,int n)
{
	LinkList p,r;
	int i;
	srand((unsigned)time(0)); //初始化随机数种子
	*L = (LinkList)malloc(sizeof(Node));
	r = *L;		//r为指向尾部的结点
	for(i=0;i<n;i++)
	{
		p = (LinkList)malloc(sizeof(Node));
		p->data = rand()%100+1;		//随机生成100以内的数字
		r->link = p;			//将表尾终端结点的指针指向新结点
		r = p;				//将当前的新结点定义为表尾终端结点
	}
	r->link = NULL;
}

L是指整个单链表,而 r 是指向尾结点的指针,r是会随着循环不断的变化,L则是随着循环增长为一个多结点的链表。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值