#include "stdafx.h"
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef int type;
typedef struct lnode //定義連結清單結點的資料結構
{
int data;
struct lnode *next;
}Lnode;
typedef Lnode node;
typedef struct dnode//定義雙連結清單結點的資料結構
{
int data;
struct dnode *lnext;
struct dnode *rnext;
}Dnode;
Dnode *createcirDlink()//尾插法建構循環連結清單帶頭結點
{
int x;
Dnode *h, *t;
t = h = (Dnode *)malloc(sizeof(Dnode));
h->rnext = NULL;
scanf_s("%d", &x);
while (x != -1)
{
Dnode *s = (Dnode *)malloc(sizeof(Dnode));
s->data = x;
s->rnext = h->rnext;
t->rnext = s;
s->lnext = t;
t = s;
scanf_s("%d", &x);
}
t->rnext = h;
h->lnext = t;
return h;
}
node *createcirlink()//尾插法建構循環連結清單不帶頭結點
{
int x;
node *h, *t;
t = h = (node *)malloc(sizeof(node));
h->next = NULL;
scanf_s("%d", &x);
while (x != -1)
{
node *s = (node *)malloc(sizeof(node));
s->data = x;
s->next = h->next;
t->next = s;
t = s;
scanf_s("%d", &x);
}
t->next = h;//尾和head相連
return h;//帶頭結點
}
node *getcirlinktail(node *h)//擷取循環連結清單表尾
{
node *p = h->next;
while (p->next != h)
p = p->next;
return p;
}
void printcirlink(node *h)//輸出循環連結清單
{
node *p = h->next;
while (p != h)
{
printf("%d ", p->data);
p = p->next;
}
}