#include <stdio.h> #include <string.h> #define N 100 #define Status int //带头结点的循环链表表示队列,且只设一个尾结点 //写出相应的指空队,判空队,入队,出队的算法; typedef struct LinkList { int number; LinkList *next; }LinkList; //元素结点类型; typedef struct { LinkList *base; }Link; Link L; void ChuShi(Link &L) { //初始化循环队列; //将尾指针和其next都指向同一个空间; L.base = NULL; L.base = new LinkList; L.base->next = L.base; } void RuDui(Link &L,LinkList p) { //入队函数; LinkList *m = new LinkList; m->number = p.number; //m先指向头结点,再另尾结点指向m; m->next = L.base->next; L.base->next = m ; L.base = m; } void ChuDui(Link &L,int &x) { //出队函数,将出队元素赋值给x; if(L.base == L.base->next) printf("队列以空,出队失败!\n"); else { x = L.base->next->number; LinkList *p; p=L.base->next->next; L.base->next->next = p->next; delete p; } } void ZhiKong(Link &L) { printf("这是一个置空队的函数:\n"); //使队尾指针指向队列的开头,并当队列不空时,释放其后空间; L.base = L.base->next; LinkList *m = L.base->next;L.base->next = L.base; while(m!=L.base) { LinkList *p = m->next; delete m; m = p; } printf("释放空间完毕!\n"); } int Pan(Link &L) { //判断队空的函数;队空返回1,否则返回0; if(L.base == L.base->next) return 1; else return 0; } void Print(Link &L) { //打印循环队列; if(L.base == L.base->next) printf("队列已空!\n"); else { LinkList *p = L.base->next; while(p!=L.base) { p=p->next; printf("%d ",p->number); } printf("\n链表打印完毕!\n"); } } int main() { ChuShi(L); LinkList p; p.number = 20; RuDui(L,p); p.number = 22; RuDui(L,p); Print(L); int x; ChuDui(L,x); Print(L); ZhiKong(L); Print(L); return 0; }