c语言实现循环链表,c语言实现循环链表的基本操作

循环链表和单链表其实区别不大,差别仅在于算法中的循环条件不是p或者p->next,而是是否等于头指针。下面这个例子简单的实现了循环链表的基本操作,其中插入和删除只是完成了主要的部分,没有判断。

#include

#include

struct Data

{

char name;

int age;

};

struct CirList

{

Data *data;

CirList *next;

};

CirList* InitListhead()

{

CirList *list;

list = (CirList*)malloc(sizeof(CirList));

list->next = NULL;

return list;

}

CirList *CreateData()

{

CirList *node;

node = (CirList*)malloc(sizeof(CirList));

node->next = NULL;

node->data = (Data*)malloc(sizeof(Data));

printf("输入姓名:");

scanf("%c",&node->data->name);

printf("输入年龄:");

scanf("%d",&node->data->age);

getchar();

return node;

}

//头插法初始化链表

void InitList(CirList *head)

{

CirList *node ;

node = CreateData();

//新结点的next指针域赋给头结点的next指针域

node->next = head->next;

//新结点赋给头结点的指针域

head->next = node;

//新结点指针域指向头结点

node->next = head;

}

//尾插法初始化链表

void InitList_2(CirList *list)

{

CirList *node,*p=list;

int i = 0;

while(i<3)

{

node = CreateData();

p->next = node;

p = node;

i++;

}

//令表尾指针指向头结点

node->next = list;

}

void Insert(CirList *list)

{

CirList *node,*saveHead = list;

node = CreateData();

printf("输入插入位置:");

int position,i=0;

scanf("%d",&position);

//寻找插入的前驱

while(list != NULL && i < position-1)

{

list = list->next;

i++;

}

node->next = list->next;

list->next = node;

}

void Delete(CirList *list)

{

CirList *temp,*saveHead = list;;

printf("输入删除位置:");

int position,i=0;

scanf("%d",&position);

//寻找插入的前驱

while(list != NULL && i < position-1)

{

list = list->next;

i++;

}

temp = list->next;

list->next = temp->next;

free(temp);

}

void Output(CirList *list)

{

CirList *p = list->next;

printf("链表中所有数据如下:\n");

while(p != list)

{

printf("姓名:%c\n",p->data->name);

printf("年龄:%d\n",p->data->age);

p = p->next;

}

}

void menu()

{

printf("*****循环链表练习*****\n");

printf(" * 1---初始化链表\n");

printf(" * 2---删除数据\n");

printf(" * 3---插入数据\n");

printf(" * 4---输出数据\n");

printf(" * 0---退出\n");

printf("********************\n");

}

int main()

{

CirList *list;

list = InitListhead();

int i=0;

printf("初始化数据:\n");

//while(i<3)

{

//InitList(list);

//i++;

}

int choose;

do

{

menu();

printf("输入您的选择:");

scanf("%d",&choose);

getchar();

switch(choose)

{

case 1:

InitList_2(list);

break;

case 2:

Delete(list);

break;

case 3:

Insert(list);

break;

case 4:

Output(list);

break;

}

}while(choose !=0);

return 0;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/457022.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于Eclipes的Logcat无法打印消息的解决办法

转自&#xff1a;http://blog.csdn.net/harry211/article/details/8453532 调试程序需要打印一些消息出来&#xff0c;logcat不好用的话就很麻烦了。这个问题折腾了好久&#xff0c;为啥就是不出来呢&#xff1f; 上网找了很多解决办法&#xff1a; 重启eclipse 重启adb 重启…

17:文字排版

17:文字排版 查看提交统计提问总时间限制: 1000ms内存限制: 65536kB描述给一段英文短文&#xff0c;单词之间以空格分隔&#xff08;每个单词包括其前后紧邻的标点符号&#xff09;。请将短文重新排版&#xff0c;要求如下&#xff1a; 每行不超过80个字符&#xff1b;每个单词…

解决AttributeError: 'str' object has no attribute 'decode'报错问题

顺着报错文件点进去&#xff0c;找到query query.decode(errors‘replace’) 将decode修改为encode即可

c语言指针数组课件,C语言指针与数组教程课件.ppt

C语言指针与数组教程;教学要求;本章主要内容;引子;#include void swap ( int x, int y ) { printf("调用时&#xff1a;x地址为&#xff1a;%p, 值为&#xff1a;%d\n",&x,x); printf("调用时&#xff1a;y地址为&#xff1a;%p, 值为&#xff1a;%d\n"…

Android控制EditText的焦点

在项目中&#xff0c;一进入一个页面, EditText默认就会自动获取焦点。 那么如何取消这个默认行为呢&#xff1f; 在网上找了好久&#xff0c;有点 监听软键盘事件&#xff0c;有点 调用 clearFouse()方法&#xff0c;但是测试了都没有&#xff01; xml中也找不到相应的属性可以…

解决python中html 代码被注释掉 依旧被解释导致报错ERROR:tornado.access:500 GET /home (xxx.xxx.xxx.xxx)

ERROR:tornado.access:500 GET /home (xxx.xxx.xxx.xxx) 注释的是Html代码&#xff0c;是给浏览器看的。 Html里的代码还是要执行。注释python代码用{# #}

springMvc 传子 bean 中有bean

2019独角兽企业重金招聘Python工程师标准>>> bean 类型 如下 1. json 字符串 $.ajax({ url :${ctx}/test/testData/f1?bookjava, type: post, dataType : "json", con…

通过rsync搭建一个远程备份系统(二)

Rsyncinotify实时备份数据 rsync在同步数据的时候&#xff0c;需要扫描所有文件后进行对比&#xff0c;然后进行差量传输&#xff0c;如果文件达到了百万或者千万级别以上是&#xff0c;扫描文件的时间也很长&#xff0c;而如果只有少量的文件变更了&#xff0c;那么此时rsync是…

C语言扫地雷游戏的题目简介,C语言程序设计课程设计(论文)-扫地雷游戏.doc...

C语言程序设计课程设计(论文)-扫地雷游戏辽 宁 工 业 大 学C语言程序设计 课程设计(论文)题目&#xff1a; 扫地雷游戏院(系)&#xff1a; 软件学院专业班级: 电子商务091班学 号:学生姓名&#xff1a;指导教师&#xff1a;教师职称&#xff1a; 助 教起止时间&#xff1a;2009…

关于地图中轨迹的平滑移动的实现

很多人应该都有类似的经历&#xff0c;叫完车&#xff0c;想看看车离我还有多远距离&#xff1f;但手机屏幕上的车不是一动不动&#xff0c;就是一跳一跳的漂移。 目前市面上大多产品“轨迹平滑移动”做的并不好。 市面上只有快的打车和一号专车实现了平滑移动&#xff0c;那…

查看centos中的用户和用户组

1、用户列表文件&#xff1a;/etc/passwd/ 2、用户组列表文件&#xff1a;/etc/group 3、查看系统中有哪些用户&#xff1a; cut -d : -f 1 /etc/passwd 4、查看可以登录系统的用户&#xff1a; cat /etc/passwd | grep -v /sbin/nologin | cut -d : -f 1 5、查看用户操作…

【Android】关于参数的传递问题

最近遇到了一个bug&#xff0c;在debug条件下可以看出更改后的值&#xff0c;但是在最终显示的结果中确实没有更改的值。经过很多次的调试后&#xff0c;才发现最后的原因竟然是因为参数传递的时候并没有将更改后的值传递给最终变量。 这时才意识到java中只存在值传递&#xff…

android按钮响应事件吗,Android 按钮响应事件的几种方式

目录1.在布局中指定onClick属性布局代码android:id"id/btn1"android:layout_width"wrap_content"android:layout_height"wrap_content"android:text"button1"android:onClick"click"/>android:id"id/btn2"andr…

Android 开源优秀 Library 推荐

之后的每月会推荐一些优秀的开源 Android libraries&#xff0c;不仅仅是学习&#xff0c;也可以方便的使用到项目中&#xff0c;避免重复的造轮子。 PageIndicatorView 如果你需要在 ViewPager 中指明当前处于哪个画面中&#xff0c;PageIndicatorView是你的不二选择。而且真…

Vue2.0王者荣耀助手

vue-gok vue2.0-王者荣耀助手 项目使用的是带玩游戏平台提供的API&#xff0c;由于腾讯公司王者荣耀游戏关闭了查看其它人的战绩功能&#xff0c;带玩平台受其影响&#xff0c;已将API暂时关闭&#xff0c;所以无法获得稳定的 DAIWAN-API-TOKEN ,所以会出现DAIWAN-API-TOKEN令…

访问对象的属性和方法

class Person(object):name ""age 0height 0weight 0def run(self):print("run")def eat(self,food):print("eat"food)def openDoor(self):print("我已经打开了门")def fillEle(self):print("我已经把大象装进了冰箱")de…

Android mc怎么和win10联机,我的世界手机版/win10版联机完美互通方法

我的世界手机版玩家想要更加方便的操作&#xff1f;0.12.1更新之后&#xff0c;你除了能使用手柄进行方便的操作之外&#xff0c;现在你能完全摆脱小屏幕蹩脚的操作了&#xff01;win10版在9月9日进行了重大更新&#xff0c;我们能直接使用win10的电脑玩我的世界&#xff0c;而…

十大基础算法

做为程序员&#xff0c;以下着十大10大基础实用算法是必须知道的。

[HNOI2004]L语言

1212: [HNOI2004]L语言 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1507 Solved: 666[Submit][Status][Discuss]Description 标点符号的出现晚于文字的出现&#xff0c;所以以前的语言都是没有标点的。现在你要处理的就是一段没有标点的文章。 一段文章T是由若干小写字…

对象的初始状态(构造函数)

class Person(object):# name ""# age 0# height 0# weight 0def run(self):print("run")def eat(self,food):print("eat"food)def __init__(self,name,age,height,weight):# print(name,age,weight,height)print("这里是init")sel…