C語言實現一個最簡單的佇列
阿新 • • 發佈:2019-02-14
1、佇列.h
#include<stdio.h>
#include<stdlib.h>
#define N 100 //定義佇列最大多少個
#define datatype char //定義佇列的資料型別
struct queue
{
datatype data[N];//儲存資料的陣列
int front; //資料的開頭
int rear; //資料的結尾
};
typedef struct queue Q; //給已經有的型別簡化一下
void init(Q *myqueue); //初始化結構體
int isempty(Q *myqueue); //判斷是否為空,1為空,0不為空
void enQueue(Q *myqueue,datatype num); //入隊
datatype DeQueue(Q *myqueue);//出隊
void printfQ(Q *myqueue); //列印佇列所有的元素
datatype gethead(Q *myqueue);//獲取開頭的一個節點
2、佇列.c
#include "佇列.h"
void init(Q *myqueue)
{
myqueue->front = myqueue->rear = 0;
}
int isempty(Q *myqueue)
{
if (myqueue->front==myqueue->rear)
{
return 1 ;
}
else
{
return 0;
}
}
void enQueue(Q *myqueue, datatype num)
{
if (myqueue->rear == N)
{
printf("失敗");
return -1;
}
else
{
myqueue->data[myqueue->rear] = num;//賦值
myqueue->rear += 1;//增加一個
}
}
datatype DeQueue (Q *myqueue)
{
if (myqueue->front==myqueue->rear)
{
printf("失敗");
return -1;
}
else
{
myqueue->front += 1;
return myqueue->data[myqueue->front-1];
}
}
void printfQ(Q *myqueue) //列印佇列所有的元素
{
printf("\n");
if (myqueue->front==myqueue->rear)
{
printf("為空");
}
else
{
for (int i = myqueue->front; i < myqueue->rear; i++)
{
printf("%6c",myqueue->data[i]);
}
}
}
datatype gethead(Q *myqueue)
{
if (myqueue->front == myqueue->rear)
{
printf("為空");
return -1;
}
else
{
return myqueue->data[myqueue->front];
}
}
3、main.c
#include<stdio.h>
#include<stdlib.h>
#include "佇列.h"
void main()
{
Q Q1;//建立
init(&Q1);
enQueue(&Q1, 'A');
printfQ(&Q1);
enQueue(&Q1, 'B');
printfQ(&Q1);
enQueue(&Q1, 'C');
printfQ(&Q1);
enQueue(&Q1, 'D');
printfQ(&Q1);
enQueue(&Q1, 'E');
printfQ(&Q1);
DeQueue(&Q1);
printfQ(&Q1);
DeQueue(&Q1);
printfQ(&Q1);
DeQueue(&Q1);
printfQ(&Q1);
DeQueue(&Q1);
printfQ(&Q1);
DeQueue(&Q1);
printfQ(&Q1);
DeQueue(&Q1);
printfQ(&Q1);
DeQueue(&Q1);
printfQ(&Q1);
DeQueue(&Q1);
printfQ(&Q1);
system("pause");
}