//@author:Archer
//@email:[email protected] || [email protected]
//模仿+練習+改進
#include <stdio.h>
#include <stdlib.h>
typedef struct queue
{
int * pBase;
int front;//隊頭
int rear;//隊尾
int length;//隊列最大長度
int real_length;//隊列實際長度
}QUEUE,*PQUEUE;
void init_queue(PQUEUE);//初始化隊列
bool entry_queue(PQUEUE);//入隊操作
void traverse_queue(PQUEUE);//查看隊伍排列狀況
bool out_queue(PQUEUE);//出隊操作
bool full_queue(PQUEUE);//檢查隊列是否爲滿
bool empty_queue(PQUEUE);//檢查隊列是否爲空
int main(void)
{
QUEUE queue;//定義一個queue的隊列
PQUEUE pqueue = &queue;
pqueue->real_length = 0;//初始化實際長度值
init_queue(pqueue);
entry_queue(pqueue);
printf("\n隊列中實際有%d個元素\n\n",pqueue->real_length);
traverse_queue(pqueue);
out_queue(pqueue);
printf("\n隊列中實際有%d個元素\n\n",pqueue->real_length);
traverse_queue(pqueue);
printf("\n\n");
system("pause");
return 0;
}
void init_queue(PQUEUE pqueue)//初始化隊列
{
printf("請輸入要生成的隊列長度:");
scanf("%d",&pqueue->length);
pqueue->pBase = (int *)malloc(sizeof(int) * (pqueue->length));
pqueue->front = pqueue->rear = 0;
return;
}
bool entry_queue(PQUEUE pqueue)//入隊操作
{
if(full_queue(pqueue))
{
printf("\n入隊操作失敗!\n");
return false;
}
else
{
int count = 0;
int len = 0;
int value;
printf("請輸入要入隊的個數(大於零小於%d):",len);
scanf("%d",&len);
while(count<len)
{
printf("請輸入第%d個入隊元素:",count+1);
scanf("%d",&value);
pqueue->pBase[pqueue->rear] = value;
pqueue->rear = ((pqueue->rear) +1) % pqueue->length;
pqueue->real_length++;
count++;
}
return true;
}
}
void traverse_queue(PQUEUE pqueue)//查看隊列排列情況
{
int i =0;
int count = pqueue->front;
while(count!=pqueue->rear)
{
i++;
printf("隊列第%d個元素爲:%d\n",i,pqueue->pBase[count]);
count = (count+1) % pqueue->length;
}
return;
}
bool out_queue(PQUEUE pqueue)//出隊操作
{
int i;
int count = 0;
int len =pqueue->real_length;
int temp;
if(empty_queue(pqueue))
{
printf("\n出隊操作失敗!\n");
return false;
}
else
{
printf("\n\n請輸入要出隊的個數:");
scanf("%d",&count);
if(count>len)
{
count = len;
}
for(i=0;i<count;i++)
{
printf("\n要出隊的元素爲:%d\n",pqueue->pBase[pqueue->front]);
temp = pqueue->pBase[pqueue->front];
pqueue->front = ((pqueue->front) +1) % pqueue->length;
printf("【%d】元素已出隊!\n",temp);
pqueue->real_length--;
}
}
}
bool full_queue(PQUEUE pqueue)//檢查隊列是否爲滿
{
if((pqueue->rear+1)%(pqueue->length)==pqueue->front)//或者pqueue->real_length == pqueue->length(但是容易忘了去計算real_queue,也就容易出錯)
{
printf("\n警告,隊列已滿!\n");
return true;
}
else
{
return false;
}
}
bool empty_queue(PQUEUE pqueue)//檢查隊列是否爲空
{
if(pqueue->front==pqueue->rear)
{
return true;
}
else
{
return false;
}
}
鏈式隊列初體驗
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.