当前位置:   article > 正文

数据结构(2)——头插法、尾插法(详细)新建列表_数据结构头插法代码

数据结构头插法代码

头插法

1.流程图

在这里插入图片描述

2.代码实现

#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef struct LNode {
	ElemType data;
	struct LNode* next;//指向下一个结点
}LNode, * LinkList;
//头插法新建链表
LinkList list_head_insert(LinkList& L)
{
	LNode* s; int x;
	L = (LinkList)malloc(sizeof(LNode));//带头结点的链表
	L->next = NULL;//L->data 里边没放东西
	scanf("%d", &x);//从标准输入读取数据
	//3 4 5 6 7 9999
	while (x != 9999) {
		s = (LNode*)malloc(sizeof(LNode));//申请一个新空间给 s,强制类型转换
		s->data = x;//把读取到的值,给新空间中的 data 成员
		s->next = L->next;//让新结点的 next 指针指向链表的第一个元素(第一个放我们数据的元素)
		L->next = s;//让 s 作为第一个元素
		scanf("%d", &x);//读取标准输入
	}
	return L;
}
//打印链表中每个结点的值
void print_list(LinkList L)
{
	L = L->next;
	while (L != NULL)//NULL 是为了代表一张空的藏宝图
	{
		printf("%3d", L->data);//打印当前结点数据
		L = L->next;//指向下一个结点
	}
	printf("\n");
}
int main()
{
	LinkList L;//链表头,是结构体指针类型
	list_head_insert(L);//输入数据可以为 3 4 5 6 7 9999,头插法新建链表
	print_list(L);//链表打印
	return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

尾插法

1.流程图

在这里插入图片描述

2.代码实现

1.定义链表头指针

单链表结点的定义

typedef struct LNode{ //单链表结点类型
ElemType data; //数据域
struct LNode *next; //指针域
}LNode, *LinkList;
  • 1
  • 2
  • 3
  • 4

由于ElemType data 未定义,所以加

typedef int ElemType;
  • 1

2.头结点申请空间

用list_tail_insert(L);这一个函数,如下

LinkList list_tail_insert(LinkList & L)
{
	int x;
	L = (LinkList)malloc(sizeof(LNode));
}
  • 1
  • 2
  • 3
  • 4
  • 5

3.scanf读取第一个元素

这里就要定义一个X,用来存放输入的元素。
需要在申请一个节点,在为这个节点申请一块空间用来指向新节点。做法和头结点类似。申请了空间后,就要把X放进去。

4.开启while循环

while其实就是在一次插入的情况下进行多次插入,而每次插入原理都是一样的

while (x != 9999) {
	s = (LNode*)malloc(sizeof(LNode));
	s->data = x;
	r->next = s;//让尾部结点指向新结点
	r = s;//r 指向新的表尾结点
	scanf("%d", &x);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

一定要记住,最后节点的next是NULL,不同于头插法,头插法第一个插入的就是最后一个,所以把该节点赋成NULL。尾节点是最后一个插入的节点的next才是NULL

r->next = NULL;//尾结点的 next 指针赋值为 NULL
  • 1

5.打印列表

打印列表就比较简单了

void print_list(LinkList L)
{
	L = L->next;
	while (L != NULL)//NULL 是为了代表一张空的藏宝图
	{
		printf("%3d", L->data);//打印当前结点数据
		L = L->next;//指向下一个结点
	}
	printf("\n");
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/543641
推荐阅读
相关标签
  

闽ICP备14008679号