news 2026/7/29 23:24:30

单链表和循环链表

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
单链表和循环链表

单链表:

(构建一个结构体,里面包含data用于储存每个节点的数据,还要包含一个用于指向下一个结点的指针*next)

typedef struct node//typedef 用于起别名

{

int data;

struct node *next;

}Node;//Node是typedef给结构体起的别名,用于让编译器识别,Node是结构体类型

建立一个单链表所需的一系列操作函数:

1.初始化头结点:head->next=NULL;

2.头插法,将后面的每个数据从头结点后面插入

3.尾接法,将待插入的数据往末尾插入这两种方法都是用来插入数据,顺序不一样

4.开辟内存空间:具体怎么实现以上插入数据操作,这就要靠开辟内存空间来实现了,每插入一个数据,都要开辟一个内存空间(结点)来存放数据,再将它用头插法或尾接法插入链表

5.删除操作函数:参数部分得包括头结点(用于找到target)和target

.......

代码如下:

#include<stdio.h> #include<stdlib.h> typedef struct node { int data; struct node *next; }Node; //头插法 Node *insert(Node *head,int e) { Node *L=(Node *)malloc(sizeof(Node)); L->data=e; if(head->next==NULL) { head->next=L; L->next=NULL; } else{ L->next=head->next; head->next=L; } return head; } //去尾巴 Node *deletnode(Node *head) { Node *tail=head; if(tail->next==NULL) return head; while(tail->next!=NULL) { tail=tail->next; } Node *p=head; while(p->next!=tail) { p=p->next; } free(tail); p->next=NULL; return head; } //遍历匹配 int compare(Node *head,int e) { Node *p=head->next; while(p!=NULL) { if(p->data==e) { return 1;//有相同的 break; } p=p->next; } return -1;//没有相同的 } //计数 int count(Node *head) { int sum=0; Node *p=head; while(p->next!=NULL) { sum++; p=p->next; } return sum; } int main() { int M,N; scanf("%d %d",&M,&N); int i=0,j=0; int arr[N]; for(i=0;i<N;i++) scanf("%d",&arr[i]); Node *head=(Node *)malloc(sizeof(Node)); head->next=NULL; head->data=0; int k=-1,sum=0; while(N--) { k++; int len=count(head); if(compare(head,arr[k])==1) continue; else { if(len>=M) head=deletnode(head); sum++; } head=insert(head,arr[k]); } printf("%d\n",sum); return 0; }

循环链表:

在单链表的基础上将尾结点连接至头结点上去

函数操作和单链表的一系列操作一样

代码如下:

#include<stdio.h> #include<stdlib.h> typedef struct node { int data; struct node*next; }Node; //头插法,用来初始化,将数据放进去 Node *insert(Node *head,int e) { Node *L=(Node *)malloc(sizeof(Node)); L->data=e; if(head->next==head) { head->next=L; L->next=head; } else { L->next=head->next; head->next=L; } return head; } //删除数据 Node *deletnode(Node *head,Node *pre,Node *target) { pre->next=target->next; free(target); return head; } //打印函数 void print(Node *head) { if(head->next==head) { printf("链表为空\n"); return; } else { Node *p=head->next; while(p->next!=head) { printf("%d ",p->data); p=p->next; } printf("%d",p->data); } } int main() { //给链表初始化 Node *head=(Node *)malloc(sizeof(Node)); if(head==NULL) { printf("内存分配失败\n"); return 1; } head->next=head; head->data=0; //将1-10给放进去 for(int i=10;i>=1;i--) { head=insert(head,i); } int N; scanf("%d",&N); while(N--) { int m; scanf("%d",&m); Node *target=head; while(target->next!=head) { if(target->data==m) break; target=target->next; } Node *pre=head; while(pre->next!=head) { if(pre->next->data==m) break; pre=pre->next; } head=deletnode(head,pre,target); //将删除的元素放入最前端 head=insert(head,m); print(head); printf("\n"); } return 0; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/28 16:56:44

Tabby终端革新:让命令行体验如丝般顺滑

Tabby终端革新&#xff1a;让命令行体验如丝般顺滑 【免费下载链接】tabby A terminal for a more modern age 项目地址: https://gitcode.com/GitHub_Trending/ta/tabby 你是否曾经在深夜调试代码时&#xff0c;被刺眼的终端界面晃得眼睛生疼&#xff1f;或者在使用SSH…

作者头像 李华
网站建设 2026/7/28 17:01:30

AI大模型:交通地铁运营数据可视化分析系统 python地铁数据分析可视化系统 交通数据 地铁运营数据 Django框架 Vue框架 Python 交通轨道数据✅

博主介绍&#xff1a;✌全网粉丝50W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业项目实战8年之久&#xff0c;选择我们就是选择放心、选择安心毕业✌ > &#x1f345;想要获取完整文章或者源码&#xff0c;或者代做&#xff0c;拉到文章底部即可与…

作者头像 李华
网站建设 2026/7/28 18:04:16

首次使用者必读:unet人像卡通化5分钟快速上手流程

首次使用者必读&#xff1a;unet人像卡通化5分钟快速上手流程 1. 功能概述 本工具基于阿里达摩院 ModelScope 的 DCT-Net 模型&#xff0c;支持将真人照片一键转换为卡通风格图像。项目由“科哥”构建并优化&#xff0c;命名为 unet person image cartoon compound&#xff0…

作者头像 李华
网站建设 2026/7/26 4:48:16

Tabby v1.0.220深度解析:现代终端的三大技术突破

Tabby v1.0.220深度解析&#xff1a;现代终端的三大技术突破 【免费下载链接】tabby A terminal for a more modern age 项目地址: https://gitcode.com/GitHub_Trending/ta/tabby 作为一款为现代开发者设计的跨平台终端工具&#xff0c;Tabby v1.0.220版本在视觉体验、…

作者头像 李华
网站建设 2026/7/28 18:06:48

网易云音乐全能助手:解锁云盘管理与歌曲下载的终极解决方案

网易云音乐全能助手&#xff1a;解锁云盘管理与歌曲下载的终极解决方案 【免费下载链接】myuserscripts 油猴脚本:网易云音乐:云盘歌曲快传(含周杰伦),歌曲下载,转存云盘,云盘匹配纠正,听歌量打卡,本地上传云盘 咪咕音乐:歌曲下载 项目地址: https://gitcode.com/gh_mirrors/…

作者头像 李华
网站建设 2026/7/26 4:49:34

百度网盘秒传链接效率革命:告别传统传输的智能解决方案

百度网盘秒传链接效率革命&#xff1a;告别传统传输的智能解决方案 【免费下载链接】baidupan-rapidupload 百度网盘秒传链接转存/生成/转换 网页工具 (全平台可用) 项目地址: https://gitcode.com/gh_mirrors/bai/baidupan-rapidupload 还在为百度网盘大文件传输等待而…

作者头像 李华