单链表的头插法与尾插法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011939264/article/details/52918373

学习完线性表的知识已经很长时间了,今天有空重新复习整理一下。线性表有两种表示方法,顺序表示和链式表示。

顺序表示即就是数组,其特点为:

优:(1)用数组存储数据元素,操作方法简单,容易实现

        (2)无须为表示结点间的逻辑关系而增加额外的存储开销

        (3)存储密度高

        (4)顺序表可按元素位序随机存取结点

缺:(1)做插入、删除操作时,需大量移动数据元素,效率非常低

        (2)要占用连续的存储空间,存储分配只能预先进行。分配过大,会导致空间浪费;分配过小将会造成数据溢出。

链式表示即就是链表,其特点为与顺序表相反

 链表不用事先估计存储空间的大小,但其存储密度较低(存储密度:指一个结点中数据元素所占的存储单元数和整个结点所占的存储单元之比,顺序表的存储密度为1,链式存储密度小于1)

链表的插入有两种方式:头插法和尾插法

头插法:在头结点(为了操作方便,在单链表的第一个结点之前附加一个结点,称为头结点。头结点的数据域可以存储数据标题、表长等信息,也可以不存储任何信息,其指针域存储第一个结点的首地址)H之后插入数据,其特点是读入的数据顺序与线性表的逻辑顺序正好相反

//尾插法建立链表
void CreateListR(LinkList &L, int n)
{ 
	// 给链表插入n个数据
	int i;
	LinkList p = NULL, q;
	L = (LinkList)malloc(sizeof(LNode)); // 生成头结点
	L->next = NULL;
	q = L;
	cout << "请输入" << n << "个数据:";
	for (i = 1; i <= n; i++)
	{
		p = (LinkList)malloc(sizeof(LNode));//每次新生成的节点
		cin >> p->data;//数据
		q->next = p;
		q = q->next;
	}
	p->next = NULL;//最后节点,指向NULL
}
//头插法建立链表
void CreatelistL(LinkList &L, int n)
{
	LinkList p,q;
	L=(LinkList)malloc(sizeof(LNode));
	L->next=NULL;
	cout << "请输入" << n << "个数据:";
	for(int i=0;i<n;i++)
	{
		q=(LinkList)malloc(sizeof(LNode));
		cin>>q->data;
		q->next=L->next;
		L->next=q;
	}
	L->next=NULL;
}

--------------------------------------------------------------------------------------------------------------------------------------------------------

关于我自己

     * 一个正派但不正经的程序员

    *  18年计算机专业硕士毕业生,腾讯SNG部门实习生,现加盟快手科技 ,后端研发工程师一枚

    *  喜欢技术,喜欢互联网

    * 民遥控 ,赵雷、陈粒、宋冬野

    * 公众号:编程美学,时不时写篇文章,偶尔数羊,其实说到底,只是想和你聊聊
在这里插入图片描述

 

猜你喜欢

转载自blog.csdn.net/u011939264/article/details/52918373