当前位置: 首页 > article >正文

算法知识-13-链表

链表的概念

链表是一种内存中非连续(或连续)的存储结构,通过指针链接其中的结点来实现串联。链表中的结点由两部分组成,一部分存放数据,另一部分存放指针。
在这里插入图片描述
一个节点两部分内容,那我们就要想到,一个元素,多种属性,这不就是结构体了
以上是一个结点,我们往往会遇到很多结点
一般对链表的操作就是插入与删除

链表插入

创建一个链表,按顺序存储1~5数字。在数字n前(1<n≤5)插入数字m(1<m<2
31
),从首结点依次输出链表中的数据。

输入描述

一行两个整数,分别表示n和m。

输出描述

从首结点依次输出链表中的数据,数字之间空格分隔。

样例输入 1

3 9
样例输出 1

1 2 9 3 4 5

#include<bits/stdc++.h>
using namespace std;
struct node{
	int data;
	node *next;
};
int main()
{
	node a = {1,NULL};
	node b = {2,NULL};
	node c = {3,NULL};
	node d = {4,NULL};
	node e = {5,NULL};
	a.next = &b;
	b.next = &c;
	c.next = &d;
	d.next = &e;
	int n;
	node f;
	cin>>n>>f.data;
	node *p = &a;
    while(p!=NULL)
    {
        if(p->next->data==n)
        {
            f.next=p->next;
            p->next=&f;
            break;
        }
        p=p->next;
    }
    p = &a;
	while(p!=NULL)
	{
		cout<<p->data<<" ";
		p = p->next;
	}
	return 0;
}

链表删除

创建一个链表,按顺序存储1~5数字。删除含有数字n的结点(1<n≤5),从链表首结点依次输出链表中的数据。

输入描述

一个整数表示n。

输出描述

从首结点依次输出链表中的数据,数字之间空格分隔。

样例输入 1

3
样例输出 1

1 2 4 5

#include<bits/stdc++.h>
using namespace std;
struct node{
	int data;
	node *next;
};
int main()
{
	node a = {1,NULL};
	node b = {2,NULL};
	node c = {3,NULL};
	node d = {4,NULL};
	node e = {5,NULL};
	a.next = &b;
	b.next = &c;
	c.next = &d;
	d.next = &e;
	int n;
	cin>>n;
	node *p = &a;
    while(p!=NULL)
    {
        if(p->next->data==n)
        {
            p->next=p->next->next;
            break;
        }
        p=p->next;
    }
    p = &a;
	while(p!=NULL)
	{
		cout<<p->data<<" ";
		p = p->next;
	}
	return 0;
}

示例题目

2923 3的倍数

小童想输入一些数字,输入-1停止输入。统计在这些数字中3的倍数有哪些,请你帮小童完成代码吧。

输入描述

一行,一些整数数字,最后一个数字为-1。

输出描述

一行,能被3整除的数字。

样例输入 1

1 2 3 4 5 6 7 8 9 -1
样例输出 1

3 6 9

这个题不用链表那是轻轻松松就过了,我们来看链表怎么做【作为链表的辅助练习】

#include<bits/stdc++.h>
using namespace std;
struct node{
	int data;
	node *next;
}*head,*tail,*p;
int main(){
	int n;
	node *head = NULL, *tail = NULL;
	while(true){
		cin>>n;
		if(n==-1)	break;
		p=new node;
		p->data=n;
		p->next=NULL;
		tail->next=p;
		tail=p;
	}
	p=head;
	while(p->next!=NULL){
		p=p->next;
		if(p->data%3==0)	cout<<p->data<<' ';
	}
	return 0;
}

2921 统计个数

小鹿想输入一些整数数字,输入-1停止输入。在输入一个数字n,统计在这些数字中,n出现了多少次。请你编写代码帮助小鹿实现吧。

输入描述

共2行,第一行,一些整数数字,最后一个数字为-1。第二行,一个整数n,表示要查找的数字。

输出描述

一个整数,表示n出现的次数。

样例输入 1

6 1 2 3 4 6 5 3 3 2 1 3 -1
3
样例输出 1

4
这个题主要考的链表元素的查询,就用模板套就可以啦

#include<iostream>
using namespace std;
struct node{
	int data;
	node *next;
}*head,*tail,*p;
int main(){
	int n;
	tail=head=new node;
	while(true){
		cin>>n;
		if(n==-1)	break;
		p=new node;
		p->data=n;
		tail->next=p;
		p->next=NULL;
		tail=p;
	}
	int m,ans=0;
	cin>>m;
	p=head;
	while(p->next!=NULL){
		p=p->next;
		if(m==p->data)	ans++;
	}
	cout<<ans;
	return 0;
}


http://www.kler.cn/a/404170.html

相关文章:

  • 【网络云计算】2024第47周-每日【2024/11/21】周考-实操题-RAID6实操解析2
  • 半导体工艺与制造篇5 光刻
  • tcp/ip异常断开调试笔记——lwip
  • 【网络安全】SSL(一):为什么需要 Keyless SSL?
  • 【IDEA】解决总是自动导入全部类(.*)问题
  • 241121学习日志——[CSDIY] [InternStudio] 大模型训练营 [11]
  • 蓝桥杯每日真题 - 第20天
  • 「Mac玩转仓颉内测版25」基础篇5 - 布尔类型详解
  • HTTP 协议的作用
  • [开源] SafeLine 好用的Web 应用防火墙(WAF)
  • Java Swing-1.基本概念及组件
  • [每日一氵] 拆分 pip install git+https://github.com/xxx/xx.git@bece3d4
  • 优化 Solana 程序
  • 嵌入式硬件杂谈(四)-高速板PCB设计 高速信号全面讲解 蛇形线 等长线 差分对 阻抗对
  • Go语言并发控制:sync.Mutex、sync.RWMutex和sync.WaitGroup详解
  • ML 系列:第 26 节 - 连续概率分布(均匀分布)
  • 【数据结构】【线性表】栈的基本概念(附c语言源码)
  • Android Studio不显示需要的tag日志解决办法《All logs entries are hidden by the filter》
  • Stable diffusion详细讲解
  • JDBC 调用带输入和输出参数的存储过程
  • 【 模型】 开源图像模型Stable Diffusion入门手册
  • 实时数仓:Lambda架构和Kappa架构有什么联系和区别
  • 点餐管理系统设计与实现(Java+SpringBoot+MySql)
  • quick 2 — qml 与c++的混合编程
  • 熟悉的 Docker,陌生的 Podman
  • undefined 和 null 区别?