循环单链表定义初始化及创建(C语言)
#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语言)的更多相关文章
- C代码实现非循环单链表
C代码实现非循环单链表, 直接上代码. # include <stdio.h> # include <stdlib.h> # include <malloc.h> ...
- c语言循环单链表
/************************************************************************* > File Name: singleLin ...
- c语言有头循环单链表
/************************************************************************* > File Name: singleLin ...
- 简单约瑟夫环的循环单链表实现(C++)
刚刚接触C++以及数据结构,今天做了第一次尝试用C++和数据结构解决问题,问题是基于约瑟夫环问题的简单版. 先来看看约瑟夫环问题的介绍: 约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3.. ...
- PTA 循环单链表区间删除 (15 分)
本题要求实现带头结点的循环单链表的创建和单链表的区间删除.L是一个带头结点的循环单链表,函数ListCreate_CL用于创建一个循环单链表,函数ListDelete_CL用于删除取值大于min小于m ...
- C语言版本:循环单链表的实现
SClist.h #ifndef __SCLIST_H__ #define __SCLIST_H__ #include<cstdio> #include<malloc.h> # ...
- 带头结点的循环单链表----------C语言
/***************************************************** Author:Simon_Kly Version:0.1 Date: 20170520 D ...
- 【c++版数据结构】之循环单链表的实现(带头结点以及尾节点)
所实现的循环单链表的结构例如以下图所看到的: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill ...
- 数据结构5: 链表(单链表)的基本操作及C语言实现
逻辑结构上一个挨一个的数据,在实际存储时,并没有像顺序表那样也相互紧挨着.恰恰相反,数据随机分布在内存中的各个位置,这种存储结构称为线性表的链式存储. 由于分散存储,为了能够体现出数据元素之间的逻辑关 ...
随机推荐
- DSSM在召回和粗排的应用举例
0.写在前面的话 DSSM(Deep Structured Semantic Models)又称双塔模型,因其结构简单,在推荐系统中应用广泛:下面仅以召回.粗排两个阶段的应用举例,具体描述下DSSM在 ...
- bochs 调试 com 文件 magicbreak
参考 https://blog.csdn.net/housansan/article/details/41833581 在网上看到2中解决此问题的方法:1.使用dos下的debug32工具单步跟踪pm ...
- codeforces 911D
D. Inversion Counting time limit per test 2 seconds memory limit per test 256 megabytes input standa ...
- translate.js
http://www.openxrest.com/translatejs/index.html translate.js translate.js is a jQuery plugin to tran ...
- WoT
WoT IoT / AIoT Web of Things (WoT) Architecture W3C Recommendation 9 April 2020 https://www.w3.org/T ...
- Virtual Reality In Action
Virtual Reality In Action VR WebXR immersive 沉浸式 https://github.com/immersive-web/webxr https://imme ...
- flutter practical
flutter practical https://flutterchina.club/ https://github.com/flutterchina/flutter-in-action https ...
- React Native & CodePush & App Center
React Native & CodePush & App Center https://docs.microsoft.com/en-us/appcenter/distribution ...
- ES2020 All in One
ES2020 All in One ES2020 new features / ES11 ES2020 中的10个新功能 1. BigInt BigInt是JavaScript中最令人期待的功能之一, ...
- Android Kotlin 数据驱动模板
Android开发人员文档: 数据绑定入门 数据绑定库 生成的绑定类 布局和绑定表达式 1. 搭建环境build.gradle:app apply plugin: "kotlin-kapt& ...