#include<stdio.h>
#include<windows.h>
/*
循环链表作为队列,设有队尾指针,带头节点,入队与出队的算法
*/
typedef struct Node{
int info;//数据信息
Node *NextNode;//下个节点的指针
} Node,*LNode;
typedef struct {
int lenth;//数据长度
LNode head,tail;//头尾指针
} CLinkedList;
void initList(CLinkedList &cList,bool hasHeadNode){
if (hasHeadNode){
//有头结点
cList.lenth=0;
LNode temp = (LNode)malloc(sizeof(Node));
if(temp==NULL){
printf("内存分配失败,内存溢出!");
return;
}
cList.head=temp;
cList.tail=temp;
temp->NextNode=cList.head;
temp->info=-1;
}
}
/*
执行入队操作,从队尾指针插入
*/
void inQueue(CLinkedList &cl,int data){
//分配内存
LNode temp = (LNode)malloc(sizeof(Node));
if(temp==NULL){
printf("内存分配失败,内存溢出!");
return;
}
//改变指针
cl.tail->NextNode=temp;
temp->NextNode=cl.head;
temp->info=data;
cl.tail=temp;
//调整链表结构信息
cl.lenth++;
}
/*
执行出队操作,从队头指针出队,删除不包括头结点的第一个元素
*/
bool popQueue(CLinkedList &cl){
//判断是否为空队
if(cl.head->NextNode==cl.head){
printf("队列为空,出队失败!");
return false;
}
//改变指针
LNode temp=cl.head->NextNode;
cl.head->NextNode=temp->NextNode;
temp->info=NULL;
temp->NextNode=NULL;
//调整链表结构信息
cl.lenth--;
return TRUE;
}
int main(int argc, char const *argv[])
{
CLinkedList cl;
initList(cl,true);
inQueue(cl,7);
inQueue(cl,6);
inQueue(cl,45);
inQueue(cl,78);
popQueue(cl);
popQueue(cl);
popQueue(cl);
system("pause");
return 0;
}