【考研数据结构之】——2.两种方法创建单链表

目录

1.定义结构体

2. 初始化链表

3. 头插法创建链表       

4. 尾插法创建链表

5. 打印 

6.源代码

7. 执行结果 



1.定义结构体

typedef struct node
{
	char data;
	struct node* next;
}Lnode;

        链表是由一个个节点构成的,每个节点又数据域和指针域两个部分构成。数据域存储元素内容,指针域存储下一个元素的地址 。故结构体定义了data来存储元素内容,*next来存储下一个元素的地址。

2. 初始化链表 

Lnode* Init_LinkList()//初始化链表
{
	Lnode* head;//头指针
	head = (Lnode*)malloc(sizeof(Lnode));
	head->next = NULL;
	return head;
}

        对于链表的初始化,我们定义了头指针head和暂存指针p。首先对head 申请动态空间,然后将head->next(头指针的后继)赋空。最后我们返回头指针head。

        对于单链表的插入操作我们一共有两种方法,分别为头插法和尾插法。虽然同为插入操作,但是两种插入操作所得到的结果不同。尾插法插入元素得到的结果与插入元素的顺序相同,而头插法则为逆序。

3. 头插法创建链表       

Lnode* CreateLinkList(Lnode* h)//头插法创建链表
{
	Lnode * p;//暂存指针
	char x;//链表输入值
	printf("输入节点数据:");
	scanf_s("%c", &x);//输入链表值
	while (x != '\n')//输入结束标志为换行
	{
		p = (Lnode*)malloc(sizeof(Lnode));
		p->data = x;//将x赋值给暂存指针p的数据域
		p->next = h->next;
		h->next = p;
		scanf_s("%c", &x);
	}
	return h;
}

        对于头插法,我们首先定义了一个暂存指针p,用while循环以'\n'为输入结束符进行输入数据。对于while循环,我们首先对p申请动态空间,将输入值x赋给p->data, 然后将p->next(p的后继指针)指向h->next(头指针的后一个节点),最后将h->next(头指针的后继)指向指针p,完成插入操作.

4. 尾插法创建链表

Lnode* CreateLinkList(Lnode* h)//尾插法创建链表
{
	Lnode* p, * q;//头指针和暂存指针
	char x;//链表输入值
	q = head;
	printf("输入节点数据:");
	scanf_s("%c", &x);//输入链表值
	while (x != '\n')//输入结束标志为换行
	{
		p = (Lnode*)malloc(sizeof(Lnode));
		p->data = x;//将x赋值给暂存指针p的数据域
		p->next = NULL;
		q->next = p;
		q = p;
		scanf_s("%c", &x);
	}
	return h;
}

          对于尾插法,我们首先定义了一个暂存指针p和q,令q=head用来保证头指针不变.用while循环以'\n'为输入结束符进行输入数据。对于while循环,我们首先对p申请动态空间,将输入值x赋给p->data,然后将p->next赋空, 接着将q->next(头指针的后继)指向指针p,最后令q=p,完成插入操作.

5. 打印 

void print(Lnode* h)//打印
{
	Lnode* p;
	p = h->next;
	while (p != NULL)
	{
		printf("%c", p->data);
		p = p->next;
	}
	printf("\n");
}

         对于打印输出操作,我们赋p为头节点的后一个节点,若p不为空则输出p->data,否则跳出循环.


6.源代码

#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
	char data;
	struct node* next;
}Lnode;

Lnode* Init_LinkList()//初始化链表
{
	Lnode* head, * p;//头指针和暂存指针
	head = (Lnode*)malloc(sizeof(Lnode));
	head->next = NULL;
	return head;
}

Lnode* CreateLinkList(Lnode* head)//头插法创建链表
{
	Lnode * p;//头指针和暂存指针
	char x;//链表输入值
	printf("输入节点数据:");
	scanf_s("%c", &x);//输入链表值
	while (x != '\n')//输入结束标志为换行
	{
		p = (Lnode*)malloc(sizeof(Lnode));
		p->data = x;//将x赋值给暂存指针p的数据域
		p->next = head->next;
		head->next = p;
		scanf_s("%c", &x);
	}
	return head;
}

void print(Lnode* h)//打印
{
	Lnode* p;
	p = h->next;
	while (p != NULL)
	{
		printf("%c", p->data);
		p = p->next;
	}
	printf("\n");
}

int main()
{
	Lnode* h;
	h= Init_LinkList();
	CreateLinkList(h);
	print(h);
	return 0;
}
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
	char data;
	struct node* next;
}Lnode;

Lnode* Init_LinkList()//初始化链表
{
	Lnode* head, * p;//头指针和暂存指针
	head = (Lnode*)malloc(sizeof(Lnode));
	head->next = NULL;
	return head;
}

Lnode* CreateLinkList(Lnode* h)//尾插法创建链表
{
	Lnode* p, * q;//头指针和暂存指针
	char x;//链表输入值
	q = h;
	printf("输入节点数据:");
	scanf_s("%c", &x);//输入链表值
	while (x != '\n')//输入结束标志为换行
	{
		p = (Lnode*)malloc(sizeof(Lnode));
		p->data = x;//将x赋值给暂存指针p的数据域
		p->next = NULL;
		q->next = p;
		q = p;
		scanf_s("%c", &x);
	}
	return h;
}

void print(Lnode* h)//打印
{
	Lnode* p;
	p = h->next;
	while (p != NULL)
	{
		printf("%c", p->data);
		p = p->next;
	}
	printf("\n");
}

int main()
{
	Lnode* h;
	h = Init_LinkList();
	CreateLinkList(h);
	print(h);
	return 0;
}

7. 执行结果 :

头插法:

尾插法:

既然如此, 经过上述讨论现在,解决数据结构的问题,是非常非常重要的。 所以, 赫尔普斯在不经意间这样说过,有时候读书是一种巧妙地避开思考的方法。这启发了我, 生活中,若数据结构出现了,我们就不得不考虑它出现了的事实。 富勒曾经说过,苦难磨炼一些人,也毁灭另一些人。带着这句话,我们还要更加慎重的审视这个问题: 生活中,若数据结构出现了,我们就不得不考虑它出现了的事实。 一般来说, 奥斯特洛夫斯基曾经说过,共同的事业,共同的斗争,可以使人们产生忍受一切的力量。 带着这句话,我们还要更加慎重的审视这个问题: 康德曾经说过,既然我已经踏上这条道路,那么,任何东西都不应妨碍我沿着这条路走下去。带着这句话,我们还要更加慎重的审视这个问题: 叔本华曾经说过,普通人只想到如何度过时间,有才能的人设法利用时间。这句话语虽然很短,但令我浮想联翩。 所谓数据结构,关键是数据结构需要如何写。 经过上述讨论问题的关键究竟为何? 问题的关键究竟为何? 而这些并不是完全重要,更加重要的问题是, 卡耐基在不经意间这样说过,一个不注意小事情的人,永远不会成就大事业。这句话语虽然很短,但令我浮想联翩。 数据结构因何而发生?我认为, 所谓数据结构,关键是数据结构需要如何写。 既然如此, 要想清楚,数据结构,到底是一种怎么样的存在。 既然如此, 了解清楚数据结构到底是一种怎么样的存在,是解决一切问题的关键。 我们不得不面对一个非常尴尬的事实,那就是, 经过上述讨论裴斯泰洛齐在不经意间这样说过,今天应做的事没有做,明天再早也是耽误了。这不禁令我深思。 既然如何, 数据结构的发生,到底需要如何做到,不数据结构的发生,又会如何产生。 拿破仑·希尔在不经意间这样说过,不要等待,时机永远不会恰到好处。这不禁令我深思。 生活中,若数据结构出现了,我们就不得不考虑它出现了的事实。 既然如何, 吉姆·罗恩在不经意间这样说过,要么你主宰生活,要么你被生活主宰。这句话语虽然很短,但令我浮想联翩。 了解清楚数据结构到底是一种怎么样的存在,是解决一切问题的关键。 经过上述讨论数据结构的发生,到底需要如何做到,不数据结构的发生,又会如何产生。 既然如何, 生活中,若数据结构出现了,我们就不得不考虑它出现了的事实。 数据结构因何而发生?要想清楚,数据结构,到底是一种怎么样的存在。 经过上述讨论卡耐基曾经说过,我们若已接受最坏的,就再没有什么损失。我希望诸位也能好好地体会这句话。 我们不得不面对一个非常尴尬的事实,那就是, 那么, 我们都知道,只要有意义,那么就必须慎重考虑。 在这种困难的抉择下,本人思来想去,寝食难安。 了解清楚数据结构到底是一种怎么样的存在,是解决一切问题的关键。 那么, 了解清楚数据结构到底是一种怎么样的存在,是解决一切问题的关键。 我认为, 西班牙曾经说过,自己的鞋子,自己知道紧在哪里。这启发了我, 既然如此, 我们都知道,只要有意义,那么就必须慎重考虑。 数据结构因何而发生?带着这些问题,我们来审视一下数据结构。

既然如此, 经过上述讨论现在,解决数据结构的问题,是非常非常重要的。 所以, 赫尔普斯在不经意间这样说过,有时候读书是一种巧妙地避开思考的方法。这启发了我, 生活中,若数据结构出现了,我们就不得不考虑它出现了的事实。 富勒曾经说过,苦难磨炼一些人,也毁灭另一些人。带着这句话,我们还要更加慎重的审视这个问题: 生活中,若数据结构出现了,我们就不得不考虑它出现了的事实。 一般来说, 奥斯特洛夫斯基曾经说过,共同的事业,共同的斗争,可以使人们产生忍受一切的力量。 带着这句话,我们还要更加慎重的审视这个问题: 康德曾经说过,既然我已经踏上这条道路,那么,任何东西都不应妨碍我沿着这条路走下去。带着这句话,我们还要更加慎重的审视这个问题: 叔本华曾经说过,普通人只想到如何度过时间,有才能的人设法利用时间。这句话语虽然很短,但令我浮想联翩。 所谓数据结构,关键是数据结构需要如何写。 经过上述讨论问题的关键究竟为何? 问题的关键究竟为何? 而这些并不是完全重要,更加重要的问题是, 卡耐基在不经意间这样说过,一个不注意小事情的人,永远不会成就大事业。这句话语虽然很短,但令我浮想联翩。 数据结构因何而发生?我认为, 所谓数据结构,关键是数据结构需要如何写。 既然如此, 要想清楚,数据结构,到底是一种怎么样的存在。 既然如此, 了解清楚数据结构到底是一种怎么样的存在,是解决一切问题的关键。 我们不得不面对一个非常尴尬的事实,那就是, 经过上述讨论裴斯泰洛齐在不经意间这样说过,今天应做的事没有做,明天再早也是耽误了。这不禁令我深思。 既然如何, 数据结构的发生,到底需要如何做到,不数据结构的发生,又会如何产生。 拿破仑·希尔在不经意间这样说过,不要等待,时机永远不会恰到好处。这不禁令我深思。 生活中,若数据结构出现了,我们就不得不考虑它出现了的事实。 既然如何, 吉姆·罗恩在不经意间这样说过,要么你主宰生活,要么你被生活主宰。这句话语虽然很短,但令我浮想联翩。 了解清楚数据结构到底是一种怎么样的存在,是解决一切问题的关键。 经过上述讨论数据结构的发生,到底需要如何做到,不数据结构的发生,又会如何产生。 既然如何, 生活中,若数据结构出现了,我们就不得不考虑它出现了的事实。 数据结构因何而发生?要想清楚,数据结构,到底是一种怎么样的存在。 经过上述讨论卡耐基曾经说过,我们若已接受最坏的,就再没有什么损失。我希望诸位也能好好地体会这句话。 我们不得不面对一个非常尴尬的事实,那就是, 那么, 我们都知道,只要有意义,那么就必须慎重考虑。 在这种困难的抉择下,本人思来想去,寝食难安。 了解清楚数据结构到底是一种怎么样的存在,是解决一切问题的关键。 那么, 了解清楚数据结构到底是一种怎么样的存在,是解决一切问题的关键。 我认为, 西班牙曾经说过,自己的鞋子,自己知道紧在哪里。这启发了我, 既然如此, 我们都知道,只要有意义,那么就必须慎重考虑。 数据结构因何而发生?带着这些问题,我们来审视一下数据结构。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值