因为循环单链表与非循环单链表的区别在于尾结点 的指针域next指向不同,循环单链表指向头结点,非循环单链表置NULL因此我简单写一个初始化顺带插入数据,以及输出数据顺带销毁链表 更多操作与我之前发的链表操作一致

#include<iostream>
#include<malloc.h>
using namespace std;
typedef int ElemType;
typedef struct node{
 ElemType data;
 struct node *next;
} SLink;
//初始化并且插入数据


void initSLink(SLink  *&L,ElemType a[],int l){
L=(SLink*)malloc(sizeof(SLink));
SLink *p,*pre;
//指向自身的循环单链表
L->next=L;
pre=L;
//尾插法
 for(int i=0;i<l;i++){
  //申请空间
   p=(SLink*)malloc(sizeof(SLink));
  //新的结点的指针指向当前尾结点的指针
   p->next=L;
   p->data=a[i];
   pre->next=p;
   pre=p;
 }
}

//显示并且销毁链表

int disSLink(SLink *&L){
 //首先一个指向
 SLink *pre=L,*p=pre->next;
 if(p==L){
   cout<<"当前链表为空"<<endl;
   return 0;
 }
 while(p!=L){
  cout<<p->data<<" ";
  free(pre);
  pre=p;
  p=pre->next;
 }
//销毁头结点
free(L);
return 1;
}
int main(){
SLink *L;
ElemType a[5]={1,2,2,1,11};
initSLink(L,a,5);
disSLink(L);
//disSLink(L);

return 0;
}

 

posted on 2019-08-14 16:54  渐凸强、啊哈  阅读(250)  评论(0编辑  收藏  举报