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

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


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. SQL Server 2008空间数据应用系列十一:提取MapInfo地图数据中的空间数据解决方案

    原文:SQL Server 2008空间数据应用系列十一:提取MapInfo地图数据中的空间数据解决方案 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Serv ...

  2. LeeCode-Contains Duplicate

    Given an array of integers, find if the array contains any duplicates. Your function should return t ...

  3. Qt Creator编译时:cannot open file 'debug\QtGuiEx.exe' File not found

    Qt Creator编译时:cannot open file 'debug\QtGuiEx.exe' File not found 利用Qt Creator编译工程时,出现如题目所示的错误,其中红色部 ...

  4. poj 3301 Texas Trip(几何+三分)

    Description After a day trip with his friend Dick, Harry noticed a strange pattern of tiny holes in ...

  5. Robot Framework 安装AutoItLibrary

    1. 下载AutoItLibrary-1.1_x64包,http://code.google.com/p/robotframework-autoitlibrary/ 2. 安装pywin32库,htt ...

  6. IOS Custom NavigationItem --写titleView

    //先自己写一个titleView UIView *titleView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 20)];//all ...

  7. 【贪心】【Uva11729】 Commando War

    你有n个部下,每个部下需要完成一项任务.第i个部下需要你花Bi分钟交待任务,然后他会立刻独立地.无间断地执行Ji分钟后完成任务.你需要选择交待任务的顺序,使得所有任务尽早执行完毕(即最后一个执行完的任 ...

  8. Mac下获取AppStore安装包文件路径-取出安装包

    问题描述:我们通过AppStore下载软件的时候想要把安装包保存下来,但是AppStore安装好之后会自动删除安装包,而且安装路径也很难找到. 解决方案: 一.打开活动监视器 二.找storedown ...

  9. QT-利用C++仿制windown自带的记事本程序V1.0

    下班无事, 发现QT还是很好用的, 就仿制windows的记事本做了一个,未彻底DEBUG, 先拿来分享下. windows记事本大概是这样的: 大概分为以下几步: 1. 界面用QT代码写,即可, Q ...

  10. [Linked List]Partition List

    Total Accepted: 53879 Total Submissions: 190701 Difficulty: Medium Given a linked list and a value x ...