c语言实现循环单链表
//初始化
Node*InitList()
{
Node*head=(Node*)malloc(sizeof(Node));
head->next=NULL;
head->data=-1;
return head;
}
增加数据
void Add(Node*s)
{
Node*p=s;
int n;
printf("你要输入多少数据:");
scanf("%d",&n);
printf("请输入%d个数据:",n);
for(int i=1;i<=n;i++)
{
Node*q=(Node*)malloc(sizeof(Node));
scanf("%d",&q->data);
p->next=q;
p=q;
}
p->next=s;
}
删除操作
void Delete(Node*s)
{
int a;
printf("请输入你要删除的数据:");
scanf("%d",&a);
Node*p=s->next;
int flag=0;
Node*q=s;
while(p!=s)
{
if(p->data==a)
{
q->next=p->next;
free(p);
flag=1;
break;
}
p=p->next;
q=q->next;
}
}
插入操作
void Insert(Node*s)
{
int a;
int flag=0;
Node*q=(Node*)malloc(sizeof(Node));
printf("请输入你要插入的数据:");
scanf("%d",&q->data);
printf("请输入你要插入哪个数据之后:");
scanf("%d",&a);
Node*p=s->next;
while(p!=s)
{
if(p->data==a)
{
q->next=p->next;
p->next=q;
flag=1;
break;
}
p=p->next;
}
if(flag==1)
printf("插入成功!");
else
printf("插入失败!");
}
//头插法
/*
void Insert(Node*s)
{
Node*q=(Node*)malloc(sizeof(Node));
printf("请输入你要插入的数据:");
scanf("%d",&q->data);
q->next=s->next;
s->next=q;
} */
显示操作
void Display(Node*s)
{
Node*v=s->next;
while(v!=s)
{
printf("%d->",v->data);
v=v->next;
}
}
清空操作
void Empty(Node*s)
{
Node*p=s->next;
Node*q=p->next;
while(p!=s)
{
free(p);
p=q;
q=q->next;
}
free(s);
}
原代码如下
#include<stdio.h>
#include<malloc.h>
typedef struct Node{
int data;
struct Nodenext;
}Node;
//初始化
NodeInitList()
{
Nodehead=(Node)malloc(sizeof(Node));
head->next=NULL;
head->data=-1;
return head;
}
void Add(Nodes)
{
Nodep=s;
int n;
printf(“你要输入多少数据:”);
scanf("%d",&n);
printf(“请输入%d个数据:”,n);
for(int i=1;i<=n;i++)
{
Nodeq=(Node)malloc(sizeof(Node));
scanf("%d",&q->data);
p->next=q;
p=q;
}
p->next=s;
}
void Display(Nodes)
{
Nodev=s->next;
while(v!=s)
{
printf("%d->",v->data);
v=v->next;
}
}
void Empty(Nodes)
{
Nodep=s->next;
Nodeq=p->next;
while(p!=s)
{
free§;
p=q;
q=q->next;
}
free(s);
}
/void Delete(Nodes)
{
int a;
printf(“请输入你要删除的数据:”);
scanf("%d",&a);
Nodep=s->next;
int flag=0;
Nodeq=s;
while(p!=s)
{
if(p->data==a)
{
q->next=p->next;
free§;
flag=1;
break;
}
p=p->next;
q=q->next;
}
}/
void Insert(Nodes)
{
int a;
int flag=0;
Nodeq=(Node*)malloc(sizeof(Node));
printf(“请输入你要插入的数据:”);
scanf("%d",&q->data);
printf(“请输入你要插入哪个数据之后:”);
scanf("%d",&a);
Nodep=s->next;
while(p!=s)
{
if(p->dataa)
{
q->next=p->next;
p->next=q;
flag=1;
break;
}
p=p->next;
}
if(flag1)
printf(“插入成功!”);
else
printf(“插入失败!”);
}
//头插法
/
void Insert(Nodes)
{
Nodeq=(Node*)malloc(sizeof(Node));
printf(“请输入你要插入的数据:”);
scanf("%d",&q->data);
q->next=s->next;
s->next=q;
} /
int main()
{
Nodehead=InitList();
Add(head);
// Delete(head);
Insert(head);
printf(“该数据情况如下”);
printf("\n");
Display(head);
Empty(head);
printf(“该链表已清空!”);
return 0;
}
c语言实现循环单链表的更多相关文章
- C语言版本:循环单链表的实现
SClist.h #ifndef __SCLIST_H__ #define __SCLIST_H__ #include<cstdio> #include<malloc.h> # ...
- c语言循环单链表
/************************************************************************* > File Name: singleLin ...
- c语言有头循环单链表
/************************************************************************* > File Name: singleLin ...
- 带头结点的循环单链表----------C语言
/***************************************************** Author:Simon_Kly Version:0.1 Date: 20170520 D ...
- 循环单链表定义初始化及创建(C语言)
#include <stdio.h> #include <stdlib.h> /** * 含头节点循环单链表定义,初始化 及创建 */ #define OK 1; #defin ...
- C代码实现非循环单链表
C代码实现非循环单链表, 直接上代码. # include <stdio.h> # include <stdlib.h> # include <malloc.h> ...
- 简单约瑟夫环的循环单链表实现(C++)
刚刚接触C++以及数据结构,今天做了第一次尝试用C++和数据结构解决问题,问题是基于约瑟夫环问题的简单版. 先来看看约瑟夫环问题的介绍: 约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3.. ...
- PTA 循环单链表区间删除 (15 分)
本题要求实现带头结点的循环单链表的创建和单链表的区间删除.L是一个带头结点的循环单链表,函数ListCreate_CL用于创建一个循环单链表,函数ListDelete_CL用于删除取值大于min小于m ...
- 【c++版数据结构】之循环单链表的实现(带头结点以及尾节点)
所实现的循环单链表的结构例如以下图所看到的: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill ...
随机推荐
- 2022年官网下安装Studio 3T最全版与官网查阅方法(无需注册下载版)
目录 一.环境 1.构建工具(参考工具部署方式) 2.保持启动 二.下载安装 1.百度搜索,或者访问官网:https://robomongo.org/,选择下载进入下载页. 2.进入下载页,选择如下下 ...
- ArcMap操作随记(6)
1.上流汇流区 [填洼]→[流向]→[分水岭] 2.输入坐标进行移动,也就是精确移动 [移动]工具(在自定义中,其中的[旋转]工具也有类似效果) 3.找最近的要素(矢量) [近邻分析]→[汇总] 4. ...
- Python selenium 三种等待方式解读
1. 强制等待第一种也是最简单粗暴的一种办法就是强制等待sleep(xx),强制让闪电侠等xx时间,不管凹凸曼能不能跟上速度,还是已经提前到了,都必须等xx时间.看代码: # -*- coding: ...
- 谈谈 Kubernetes Operator
简介 你可能听过Kubernetes中Operator的概念,Operator可以帮助我们扩展Kubernetes功能,包括管理任何有状态应用程序.我们看到了它被用于有状态基础设施应用程序的许多可能性 ...
- Java的浅克隆和深克隆
如何实现对象的克隆 (1)实现 Cloneable 接口并重写 Object 类中的 clone() 方法: (2)实现 Serializable 接口,通过对象的序列化和反序列化实现克隆,可以实现真 ...
- SQLyog创建数据库过程
点击数据库,点击创建数据库 输入数据库名称,输入字符集,排序规则选默认的 然后一个数据库就建好了
- synchronized 和 ReentrantLock 的区别?
synchronized 是和 if.else.for.while 一样的关键字,ReentrantLock 是类, 这是二者的本质区别.既然 ReentrantLock 是类,那么它就提供了比 sy ...
- HTML 5中的输出元素是什么?
当你需要计算两个输入的结果并将结果放到一个标签里的时候,就需要输出元素了.比如你有两个文本框(参见下图),你想要让这些文本框数字相加,然后输出给标签. 下面就是如何使用HTML 5代码输出元素. &l ...
- 学习Keepalived(二)
一.keepalived简介 keepalived是集群管理中保证集群高可用的一个服务软件,其功能类似于,用来防止单点故障. 二.vrrp协议2.1 vrrp协议简介 在现实的网络环境中,两台需要通信 ...
- SpringDataJpa备忘录
单向多对一关系 //产品类型 一的一方 @Entity public class ProductDir { @Id @GeneratedValue private Long id; private S ...