单循环链表和单链表的唯一区别在于单循环链表的最后一个节点的指针域指向第一个节点,

使得整个链表形成一个环.


C实现代码如下:

 #include<stdio.h>

 typedef struct node
{
int data;
struct node *next;
}Node; //链表的初始化
Node* InitList(int number)
{
int i;
Node *pHead=(Node *)malloc(sizeof(Node));
Node *TempHead=pHead;
Node *Head=pHead;
int data;
for(i=;i<number;i++)
{
pHead=(Node *)malloc(sizeof(Node));
printf("Please input the %dst node data:\n",i+);
scanf("%d",&data);
pHead->data=data;
pHead->next=Head->next;
TempHead->next=pHead;
TempHead=TempHead->next;
}
return Head;
} //显示链表
void ShowList(Node *Head)
{
Node *TempNode=Head;
TempNode=TempNode->next;
printf("Show List:\n");
while(TempNode->next!=Head->next)
{
printf("%d ",TempNode->data);
TempNode=TempNode->next;
}
printf("%d",TempNode->data);
printf("\n");
} //输出链表某个值的位置
int ListLocation(Node *Head,int data,int number)
{
Node *TempNode=Head;
int location=;
TempNode=TempNode->next;
while(TempNode->next!=Head->next)
{
if(TempNode->data==data)
{
return location;
}
location++;
TempNode=TempNode->next;
}
if(location>=number)
printf("Not found!");
} //输出链表某个位置的值
int ListData(Node *Head,int location,int number)
{
if(location>number)
printf("Not found!"); Node *TempNode=Head;
TempNode=TempNode->next;
int i;
for(i=;i<=number;i++)
{
if(location==i)
return TempNode->data;
TempNode=TempNode->next;
}
} //头入法插入元素
void HeadInsertData(Node *Head,int data)
{
Node *TempNode=Head;
Node *InsertNode=(Node *)malloc(sizeof(Node));
InsertNode->data=data; while(TempNode->next->next!=Head->next)
TempNode=TempNode->next; TempNode=TempNode->next; InsertNode->next=Head->next;
TempNode->next=InsertNode;
Head->next=InsertNode;
} //尾入插入除元素
void TailInsertData(Node *Head,int data)
{
Node *TempNode=Head;
Node *InsertNode=(Node *)malloc(sizeof(Node));
InsertNode->data=data; while(TempNode->next->next!=Head->next)
TempNode=TempNode->next; TempNode=TempNode->next; TempNode->next=InsertNode;
InsertNode->next=Head->next;
} //删除头结点
void HeadDeleteData(Node *Head)
{
Node *TempNode=Head;
while(TempNode->next->next!=Head->next)
TempNode=TempNode->next;
TempNode->next->next=Head->next->next;
Head->next=Head->next->next;
} //删除尾结点
void TailDeleteData(Node *Head)
{
Node *TempNode=Head->next;
while(TempNode->next!=Head->next)
{
TempNode=TempNode->next;
if(TempNode->next->next==Head->next)
break;
} TempNode->next=Head->next;
} int main()
{
Node *Head;
int number;
printf("Please input the node number:\n");
scanf("%d",&number);
Head=InitList(number);
printf("The initital list is:\n");
ShowList(Head); int flag;
printf("\n\n");
printf("**********************Your Choice********************\n");
printf("****************1-输出链表某个值的位置***************\n");
printf("****************2-输出链表某个位置的值***************\n");
printf("****************3-头入法插入元素*********************\n");
printf("****************4-尾入法插入元素*********************\n");
printf("****************5-删除头结点*************************\n");
printf("****************6-删除尾结点*************************\n");
printf("****************0-退出*******************************\n");
printf("\n\n");
printf("Please input flag:\n");
scanf("%d",&flag); switch(flag)
{
case :
{
int data;
printf("Please input the data you want locate:\n");
scanf("%d",&data);
int location;
location=ListLocation(Head,data,number);
printf("The data's location is: %d",location);
break;
}
case :
{
int location;
printf("Please input the location you want data:\n");
scanf("%d",&location);
int data;
data=ListData(Head,location,number);
printf("The location's data is: %d\n",data);
break;
}
case :
{
int data;
printf("Please input the data you want insert in head:\n");
scanf("%d",&data);
HeadInsertData(Head,data);
ShowList(Head);
break;
}
case :
{
int data;
printf("Please input the data you want insert in tail:\n");
scanf("%d",&data);
TailInsertData(Head,data);
ShowList(Head);
break;
}
case :
{
HeadDeleteData(Head);
ShowList(Head);
break;
}
case :
{
TailDeleteData(Head);
ShowList(Head);
break;
}
case :
{
printf("You choose to exit.\n");
break;
}
}
return ;
}

结果图:


(续)顺序表之单循环链表(C语言实现)的更多相关文章

  1. 【线性表基础】顺序表和单链表的插入、删除等基本操作【Java版】

    本文表述了线性表及其基本操作的代码[Java实现] 参考书籍 :<数据结构 --Java语言描述>/刘小晶 ,杜选主编 线性表需要的基本功能有:动态地增长或收缩:对线性表的任何数据元素进行 ...

  2. 线性表源码分享(c++),包含顺序表、单链表、循环链表、双向链表

    ---恢复内容开始--- 我是一个c++和数据结构的初学者,本文主要是把清华大学出版社的数据结构(用面向对象方法与c++语言描述)(第2版)这本书中第二章线性表的源码抄下来,在学习的过程中有助于加深印 ...

  3. 顺序表的基本操作【c语言】【创建、插入、删除、输出】

    作为数据结构初学者,上课时对一些知识点掌握得不是很透彻,所以利用课余时间通过微博平台总结所学知识,加深对知识的见解,记录学习历程便于后需要时参考. #include<stdio.h> #i ...

  4. 顺序表及基本操作(C语言)

    #include <stdio.h> #include <stdlib.h> //基本操作函数用到的状态码 #define TRUE 1; #define FALSE 0; # ...

  5. Java: 实现顺序表和单链表的快速排序

    快速排序 快速排序原理 快速排序(Quick Sort)的基本思想是,通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可对这两部分记录继续进行排序,以达到 ...

  6. K:顺序表和链表的比较

     顺序表和链表是线性表的两种基本实现形式(链表还有多种变化形式),对于这两种实现方式,没有一种方法可以称是最好的,他们各自有着各自的特点和优缺点,适用于不同的应用场景.  与顺序表相比,链表较为灵活, ...

  7. 线性表 及Java实现 顺序表、链表、栈、队列

    数据结构与算法是程序设计的两大基础,大型的IT企业面试时也会出数据结构和算法的题目, 它可以说明你是否有良好的逻辑思维,如果你具备良好的逻辑思维,即使技术存在某些缺陷,面试公司也会认为你很有培养价值, ...

  8. 【数据结构】之顺序表(Java语言描述)

    之前总结过使用C语言描述的顺序表数据结构.在C语言类库中没有为我们提供顺序表的数据结构,因此我们需要自己手写,详细的有关顺序表的数据结构描述和C语言代码请见[我的这篇文章]. 在Java语言的JDK中 ...

  9. C语言实现顺序表(顺序存储结构)

    顺序表(顺序存储结构)及初始化过程详解 顺序表,全名顺序存储结构,是线性表的一种.通过<线性表>一节的学习我们知道,线性表用于存储逻辑关系为"一对一"的数据,顺序表自然 ...

随机推荐

  1. C# System.Uri类_获取Url的各种属性_文件名_参数_域名_端口等等

    System.Uri类用于处理Uri地址信息,常用到它的地方有,相对Uri地址转绝对Uri地址,获取Uri的某部分信息等等,可以说是一个非常有用的类. 一.属性 AbsolutePath 获取 URI ...

  2. grok 正则也支持常规正则

    2016-08-29 17:40:01,19 INFO com.zjzc.common.utils.HttpUtil - 请求接口: https://www.zjcap.cn/pay/interfac ...

  3. UESTC_秋实大哥与妹纸 2015 UESTC Training for Data Structures<Problem F>

    F - 秋实大哥与妹纸 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 1500/1500KB (Java/Others) Submit ...

  4. Eclipse配置Maven开发环境

    前言: 现在Eclipse版本越来越高.高版本的Eclipse甚至已经集成了Maven像是SpringSource的哪个版本.用习惯了Eclipse.在开发中还是不想更换掉自己的IDE.如此一来就又了 ...

  5. HBase 3、HBase练习题

    1.建立学生和课程表 要求:学生可以选择多个课程,每个课程可以被多个学生选择. 查询某个学生所选的所有课程列表 查询某个课程,的学生列表 学生可以修改所选的课程 方案:学生与课程之间是多对多关系,那可 ...

  6. hdu 5625 Clarke and chemistry

    Problem Description Clarke is a patient with multiple personality disorder. One day, Clarke turned i ...

  7. array_multisort 关联(string)键名保持不变,但数字键名会被重新索引。

    $array = [ '2' => [ 'title' => 'Flower', 'order' => 3 ], '3' => [ 'title' => 'Rock', ...

  8. 不定义JQuery插件,不要说会JQuery[转载]

    http://www.cnblogs.com/xcj26/p/3345556.html 不定义JQuery插件,不要说会JQuery 一:导言 有些WEB开发者,会引用一个JQuery类库,然后在网页 ...

  9. 怎样使用jetty

    一直都听说jetty跟Tomcat一样,是一个web容器.之前做项目的时候,也使用过jetty,只是当时jetty是作为一个插件,跟maven集成使用的.那个时候,因为是第一次使用jetty,感觉je ...

  10. qt获取本机网络信息

    networkinformation.h #include<QtGui/QWidget> #include<QLabel> #include<QPushButton> ...