写在前面的一些话:这只是个人学习王道数据结构的代码笔记,仅供参考,如果有错误请友好的指出,谢谢!!!
一、循环单链表
1、循环单链表的创建
循环单链表实际上就是尾节点的next指针指向头节点
创建一个循环单链表的实现代码如下:
#include <stdio.h>
#include <stdlib.h>
typedef struct LNode{
//定义一个单链表结点类型
int data; //每个结点存放一个数据元素
struct LNode *next;//指针指向下一个结点
}LNode,*LinkList;
bool InitList(LinkList &L){
//初始化一个循环单链表
L=(LinkList) malloc(sizeof(LNode));//分配一个头结点
if(L==NULL)//内存分配失败
return false;
L->next=L;//头结点next指向头结点!!!
return true;
}
bool InsertElem(LinkList &L){
//循环从键盘输入从表头插入数据元素
int x;
LNode *p;
scanf("%d",&x);
while(x!=9999){
//输入9999就结束插入数据
p=(LNode *) malloc(sizeof(LNode));
p->data=x;
p->next=L->next;
L->next=p;
scanf("%d",&x);
}
return true;
}
void PrintList(LinkList L){
//打印循环单链表的元素
LNode *p=L->next;
printf("循环单链表的元素是:\n");
while(p!=L) {
//判断是否是最后一个结点
printf("%d\n", p->data);
p=p->next;
}
}
int main(){
LinkList L;
InitList(L