#include <stdio.h>
#include <stdlib.h> /**
* 含头节点循环单链表定义,初始化 及创建
*/ #define OK 1;
#define ERROR 0; //函数返回类型,表示函数运行结果的状态
typedef int Status;
//定义数据元素类型
typedef char ElemType; //循环单链表定义
typedef struct LoopLnode {
ElemType data; //数据域,这里是char类型变量
struct LoopLnode *next; //指针域,结构体类型指针
} LoopLnode, *LoopLinkList; //循环单链表初始化
Status InitList(LoopLinkList *list) {
(*list)=(LoopLinkList)malloc(sizeof(LoopLnode));
(*list)->next=(*list);
(*list)->data='T'; //测试用,可不写
return OK;
} //1."头插法"创建仅含"头指针"的单向循环链表
Status CreateList_H(LoopLinkList *list,ElemType arrData[],int length){
int j;
for(j=length-1;j>=0;j--){
//新建结点
LoopLnode *node;
node=(LoopLnode*)malloc(sizeof(LoopLnode));
node->data=arrData[j];
node->next=NULL; //插入循环链表
node->next=(*list)->next;
(*list)->next=node; //list始终指向头结点
}
return OK;
} //2."尾插法"创建仅含"头指针"的单向循环链表
Status CreateList_R(LoopLinkList *list,ElemType arrData[],int length){
LoopLnode *r;
r=*list;
int j;
for(j=0;j<length;j++) {
//新建结点
LoopLnode *node;
node=(LoopLnode*)malloc(sizeof(LoopLnode));
node->data=arrData[j];
node->next=NULL; //插入循环链表
node->next=r->next;
r=node;
}
return OK;
} //3."头插法"创建仅含"尾指针"的单向循环链表
Status BuildList_H(LoopLinkList *list,ElemType arrData[],int length){
int j;
for(j=length-1;j>=0;j--){
//新建结点
LoopLnode *node;
node=(LoopLnode*)malloc(sizeof(LoopLnode));
node->data=arrData[j];
node->next=NULL; //node插入1号结点,list为尾指针
node->next=(*list)->next->next; //node->next=头结点->next
if((*list)->next==(*list)) (*list)=node; //当只有头结点时(插入第一个结点时,手动设置node为尾指针)
(*list)->next->next=node; //头结点->next=node;
}
return OK;
} //4."尾插法"创建仅含"尾指针"的单向循环链表
Status BuildList_R(LoopLinkList *list,ElemType arrData[],int length) {
int j;
for(j=0;j<length;j++) {
//新建结点
LoopLnode *node;
node=(LoopLnode*)malloc(sizeof(LoopLnode));
node->data=arrData[j];
node->next=NULL; node->next=(*list)->next; //node->next=头结点
(*list) = node; //尾指针 —> node
}
return OK;
} int main(void){
//产生待插入到链表的数据
ElemType data1='A',data2='B',data3='C';
ElemType waitInserted[]={data1,data2,data3,};
//获得数组长度
int arrLength=sizeof(waitInserted)/sizeof(waitInserted[0]); /**1.头插法建立只含头指针循环单链表**/
//定义链表并初始化
LoopLinkList list1;
InitList(&list1);
//按既定数据建立链表
CreateList_H(&list1,waitInserted,arrLength);
//测试
printf("%c\n",list1->next->next->next->next->next->next->data); //B /**2.尾插法建立只含头指针循环单链表**/
//定义链表并初始化
LoopLinkList list2;
InitList(&list2);
//按既定数据建立链表
CreateList_R(&list2,waitInserted,arrLength);
//测试
printf("%c\n",list1->next->next->next->next->next->next->data); //B /**3.头插法建立只含尾指针循环单链表**/
//定义链表并初始化
LoopLinkList list3;
InitList(&list3);
//按既定数据建立链表
BuildList_H(&list3,waitInserted,arrLength); //list3指向表尾
//测试
printf("%c\n",list3->next->next->next->next->next->next->next->next->next->data); //T /**4.尾插法建立只含尾指针循环单链表**/
//定义链表并初始化
LoopLinkList list4;
InitList(&list4);
//按既定数据建立链表
BuildList_H(&list4,waitInserted,arrLength); //list4指向表尾
//测试
printf("%c\n",list4->next->next->next->next->next->next->next->next->next->next->data); //A printf("\nEND!");
return 0;
}

循环单链表定义初始化及创建(C语言)的更多相关文章

  1. C代码实现非循环单链表

    C代码实现非循环单链表, 直接上代码. # include <stdio.h> # include <stdlib.h> # include <malloc.h> ...

  2. c语言循环单链表

    /************************************************************************* > File Name: singleLin ...

  3. c语言有头循环单链表

    /************************************************************************* > File Name: singleLin ...

  4. 简单约瑟夫环的循环单链表实现(C++)

    刚刚接触C++以及数据结构,今天做了第一次尝试用C++和数据结构解决问题,问题是基于约瑟夫环问题的简单版. 先来看看约瑟夫环问题的介绍: 约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3.. ...

  5. PTA 循环单链表区间删除 (15 分)

    本题要求实现带头结点的循环单链表的创建和单链表的区间删除.L是一个带头结点的循环单链表,函数ListCreate_CL用于创建一个循环单链表,函数ListDelete_CL用于删除取值大于min小于m ...

  6. C语言版本:循环单链表的实现

    SClist.h #ifndef __SCLIST_H__ #define __SCLIST_H__ #include<cstdio> #include<malloc.h> # ...

  7. 带头结点的循环单链表----------C语言

    /***************************************************** Author:Simon_Kly Version:0.1 Date: 20170520 D ...

  8. 【c++版数据结构】之循环单链表的实现(带头结点以及尾节点)

    所实现的循环单链表的结构例如以下图所看到的: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill ...

  9. 数据结构5: 链表(单链表)的基本操作及C语言实现

    逻辑结构上一个挨一个的数据,在实际存储时,并没有像顺序表那样也相互紧挨着.恰恰相反,数据随机分布在内存中的各个位置,这种存储结构称为线性表的链式存储. 由于分散存储,为了能够体现出数据元素之间的逻辑关 ...

随机推荐

  1. [Angular] 删除旧版本,升级安装最新版本

    目录 删除旧版本 清除未卸载干净的angular-cli缓存 对于Linux 对于Windows 安装最新版本 查看安装版本 创建新项目 删除旧版本 npm uninstall -g angular- ...

  2. ELK + Redis 日志收集 & HAProxy

    参考博文:http://www.ttlsa.com/linux/haproxy-log-configuration-syslog/ 引入 Redis 消息队列 Log-file 收集数据到 Redis ...

  3. Windows10电脑优化和使用

    本文将结合自身经验和短视频软件中的优化技巧,推荐一些Win10系统的优化和使用小技巧. 电脑优化 新电脑调出我的电脑等桌面图标: 右键桌面,选择个性化,左侧选择主题,在相关的设置中找到桌面图标设置,将 ...

  4. woj1009 最短路 The Legend of Valiant Emigration

    title: woj1009 最短路 The Legend of Valiant Emigration date: 2020-03-07 categories: acm tags: [acm,最短路, ...

  5. Apple iPhone 12 Pro 数据迁移方式 All In One

    Apple iPhone 12 Pro 数据迁移方式 All In One iPhone 12 Pro https://mp.weixin.qq.com/s/US1Z_69zVQIhV-cNW1E6A ...

  6. js debounce & throttle All In One

    js debounce & throttle All In One debounce & throttle js 节流 防抖 debounce 防抖 防抖,是指一个事件触发后在单位时间 ...

  7. Swift in Action

    Swift in Action Swift Playgrounds https://apps.apple.com/us/app/swift-playgrounds/id1496833156?mt=12 ...

  8. NGK公链全面服务旅游经济

    有数据显示,2019 年全球旅游总收入已达 6.5万亿美元, 占全球 GDP 的 7.3%,旅游业发展所创造的收益,于全球经济的重要性,不言而喻. 在旅游产业蓬勃发展的同时,中心化运营模式下却仍存在痛 ...

  9. [转]什么是 C 和 C ++ 标准库?

    转载地址:https://www.cnblogs.com/findumars/p/9000371.html 简要介绍编写C/C ++应用程序的领域,标准库的作用以及它是如何在各种操作系统中实现的.我已 ...

  10. C语言指针基本知识

    对程序进行编译的时候,系统会把变量分配在内存单位中,根据不同的变量类型,分配不同的字节大小.比如int整型变量分配4个字节,char字符型变量分配1个字节等等.被分配在内存的变量,可以通过地址去找到, ...