news 2026/4/26 19:59:26

单链表和循环链表

作者头像

张小明

前端开发工程师

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/4/26 19:58:23

Smithbox完全掌握手册:游戏编辑新境界

Smithbox完全掌握手册&#xff1a;游戏编辑新境界 【免费下载链接】Smithbox Smithbox is a modding tool for Elden Ring, Armored Core VI, Sekiro, Dark Souls 3, Dark Souls 2, Dark Souls, Bloodborne and Demons Souls. 项目地址: https://gitcode.com/gh_mirrors/sm/S…

作者头像 李华
网站建设 2026/4/24 6:51:59

机器学习:python共享单车数据分析系统 可视化 Flask框架 单车数据 骑行数据 大数据 机器学习 计算机毕业设计✅

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

作者头像 李华
网站建设 2026/4/18 9:12:16

交通数据分析项目:python地铁数据可视化分析系统 Flask框架 爬虫 数据分析 轨道数据 地铁数据分析 大数据 (源码)✅

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

作者头像 李华
网站建设 2026/4/24 18:38:54

Java OCR终极指南:RapidOCR完整使用教程与性能优化

Java OCR终极指南&#xff1a;RapidOCR完整使用教程与性能优化 【免费下载链接】RapidOcr-Java &#x1f525;&#x1f525;&#x1f525;Java代码实现调用RapidOCR(基于PaddleOCR)&#xff0c;适配Mac、Win、Linux&#xff0c;支持最新PP-OCRv4 项目地址: https://gitcode.c…

作者头像 李华
网站建设 2026/4/24 18:38:53

Smithbox完全指南:快速掌握游戏修改的核心技巧

Smithbox完全指南&#xff1a;快速掌握游戏修改的核心技巧 【免费下载链接】Smithbox Smithbox is a modding tool for Elden Ring, Armored Core VI, Sekiro, Dark Souls 3, Dark Souls 2, Dark Souls, Bloodborne and Demons Souls. 项目地址: https://gitcode.com/gh_mirr…

作者头像 李华
网站建设 2026/4/18 0:14:03

Citra模拟器完全使用手册:从零开始畅玩3DS游戏

Citra模拟器完全使用手册&#xff1a;从零开始畅玩3DS游戏 【免费下载链接】citra 项目地址: https://gitcode.com/GitHub_Trending/ci/citra 想要在电脑上重温经典的Nintendo 3DS游戏吗&#xff1f;Citra模拟器为你打开了一扇通往3DS游戏世界的大门。作为一款开源的跨…

作者头像 李华