链表的 创建 打印 删除 排序 拆分

废话不多说系列1
最近浪浪才学完链表,相信好多人应该和我一样,面对链表的相关操作也是头疼的很。对于链表环环相扣的结构开始对新手来说确实是不太好理解,更不用说自己对链表进行其他的一系列操作了。但是如果你能够通过画图把链表的结构给弄懂了,那么其实你会发现操作链表就像是操作数组的元素样简单。
进入正题:

The First:链表的创建;

废话不多说系列2:链表的创建是基础,删除,查找,排序,拆分都得先有个链在这把(说好的废话不多说,那就酱叭!)
链表的创建主要有静态链表还有动态链表(其实还有双向链表,但是本浪还没有深入学习,所以需要你的关注,待后更新,5555)

一.静态链表

废话不多说系列3:静态链用的比较少,而且比较简单(不是来拉仇恨的2333),就是简单的接链,所以直接上干货。。。。

#include<iostream>
using namespace std;
typedef struct Student{
	string name;
	int score;
	struct Student* next;
}Stu;
void print(Stu* head){
	Stu* i=head;
	while(i!=NULL){
		cout<<i->name<<"\t"<<i->score<<endl;
		i=i->next;
	}
}
int main(){
	Stu*head;
	Stu stu[3];//这里我们只是为了演示接链的过程
	//所以数据创建的比较简单
	for(int i=0;i<3;++i){
		cin>>stu[i].name >>stu[i].score;
	} 
	//下面的过程就是机械地接链过程了 
	head=&stu[0];
	stu[0].next =&stu[1];
	stu[1].next =&stu[2];//把上面地声明换成指针,这里换成箭头来进行输入也是可以的
	stu[2].next=NULL;
	print(head);
	return 0; 
}

运行结果如图
*

二.动态链表

废话不多说系列4:动态链表我们用的比较多,本浪认为主要是动态链表能够根据我们地需要进行自由地扩展,更加符合我们生活中的情况,但是这个链表地创建对于初学者来说可能是比较困难的,当时本浪在学习的时候也是花了好一番功夫呢。但是既然是废话不多说,所以在这里还是要总结一下自己的学习经验,好然更多的同学能很轻松的建立一个动态链表。那么学习经验就是:慢慢的都是套路
******套路总结如下:******指针要三个
一个头,一个探索指针,一个尾随指针
首个数据不空头指向它,首个数据为空head=NULL;
探索指针malloc一个读入一个,p2在判断p1不空的时候紧跟上;
最终别忘了指向NULL;
**说这么多,重要的就总结一句话:**需要三个指针…
下面的代码只是给出函数题,其他的枝枝叶叶就由读者自己补齐把

Stu* creat(){
	Stu*head;
	Stu*p1,*p2;
	p1=(Stu*)malloc(LEN);
	scanf("%s %d",p1->name,&p1->score);//这里不要使用cin,亲测会出现毛病
	//曾经有位大佬知道小弟说cin输入流本身就有很多毛病,所以在涉及到
	//字符串输入时笔者喜欢用scanf 
	int n=1;//这里的n是用来判断是不是第一次输入数据
	//如果是第一次输入数据的话就让头指针指向它 
	while(p1->score!=0){
		if(n==1){//看到没n的作用显现了
		 head=p1; 
		 n++;//从此以后n再无用 
		}else{
			p2->next=p1;
		}
		p2=p1;//p2跟进p1的步伐
		p1=(Stu*)malloc(LEN);
		scanf("%s %d",p1->name,&p1->score);//这里的重复申请主要是为了呼应while的循环判断 
	}
	p2->next=NULL;
	return head; 
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。在编写C程序时,需要注意变量的声明和定义、指针的使用、内存的分配与释放等问题。C语言中常用的数据结构包括: 1. 数组:一种存储同类型数据的结构,可以进行索引访问和修改。 2. 链表:一种存储不同类型数据的结构,每个节点包含数据和指向下一个节点的指针。 3. 栈:一种后进先出(LIFO)的数据结构,可以通过压入(push)和弹出(pop)操作进行数据的存储和取出。 4. 队列:一种先进先出(FIFO)的数据结构,可以通过入队(enqueue)和出队(dequeue)操作进行数据的存储和取出。 5. 树:一种存储具有父子关系的数据结构,可以通过中序遍历、前序遍历和后序遍历等方式进行数据的访问和修改。 6. 图:一种存储具有节点和边关系的数据结构,可以通过广度优先搜索、深度优先搜索等方式进行数据的访问和修改。 这些数据结构在C语言中都有相应的实现方式,可以应用于各种不同的场景。C语言中的各种数据结构都有其优缺点,下面列举一些常见的数据结构的优缺点: 数组: 优点:访问和修改元素的速度非常快,适用于需要频繁读取和修改数据的场合。 缺点:数组的长度是固定的,不适合存储大小不固定的动态数据,另外数组在内存中是连续分配的,当数组较大时可能会导致内存碎片化。 链表: 优点:可以方便地插入和删除元素,适用于需要频繁插入和删除数据的场合。 缺点:访问和修改元素的速度相对较慢,因为需要遍历链表找到指定的节点。 栈: 优点:后进先出(LIFO)的特性使得栈在处理递归和括号匹配等问题时非常方便。 缺点:栈的空间有限,当数据量较大时可能会导致栈溢出。 队列: 优点:先进先出(FIFO)的特性使得

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值