#include<iostream>
#include<stdlib.h>
#include<string>
using namespace std;
//循环单链表 ,注意:头插法不适合创建循环单链表,因为找不到尾结点
/*
与单链表的区别:
循环链表的操作和单链表基本一致,差别仅在于算法中的循环条件不是L或L->为空,
而是它们是否等于头指针,因为当循环到头指针,说明链表已经完整遍历一次.
*/
typedef struct LNode{
int data;
struct LNode *next;//指向后续结点
}LNodeList;
int main(){
//函数声明
bool CreateListR(LNodeList *&L,int a[],int n);//尾插法创建循环单链表
void DisList(LNodeList *L);//打印输出
LNodeList *L;
int a[]={1,2,3,4,5,6,7,8,9};
int n = sizeof(a)/sizeof(a[0]);
CreateListR(L,a,n);
DisList(L);
return 0;
}
//尾插法创建循环单链表
/*--------------------------------------------------------------------*/
bool CreateListR(LNodeList *&L,int a[],int n){
LNodeList *q,*r;//r 作为:尾结点
L = new LNodeList;
L->next=NULL;
/*------------------------------*/
r=L;//尾结点初始化指向L的头结点
/*------------------------------*/
for(int i=0;i<n;i++){
q = new LNodeList;
q->data =a[i];
r->next = q;
r=q;//改变尾结点
}
r->next =L;//尾结点指向头结点
}
/*--------------------------------------------------------------------*/
//打印输出
void DisList(LNodeList *L){
LNodeList *p = L->next;//初始指向L的首节点
while(p!=L){ //p==L,表示已经遍历一遍
cout<<p->data<<" ";
p = p->next;
}
cout<<'\n';
}
数据结构循环单链表尾插法创建
最新推荐文章于 2024-06-25 07:11:52 发布