<pre name="code" class="cpp">#include <stdio.h>
#include <stdlib.h>
typedef int elemType;
typedef struct List
{
elemType elem;
struct List* next;
}Node;
typedef struct ListQuene
{
Node* first;
Node* rear;
int queneSize;
}Quene;
//创建空队列
Quene * createQuene()
{
Quene *Q;
if((Q=(Quene*)malloc(sizeof(Quene)))!=NULL)
{
Q->first=NULL;
Q->rear=NULL;
Q->queneSize=0;
}
return Q;
}
//判断队列是否为空
bool isEmptyQuene(Quene* Q)
{
return Q->first==NULL&&Q->rear==NULL&&Q->queneSize==0;
}
//返回队列大小
int getSize(Quene* Q)
{
return Q->queneSize;
}
//新元素入队
void enterQuene(Quene* Q,elemType elem)
{
Node* p;
if((p=(Node*)malloc(sizeof(Node)))!=NULL)
{
p->elem=elem;
p->next=NULL;
}
if(isEmptyQuene(Q))//空队列
Q->first=p;
else
Q->rear->next=p;
Q->rear=p;
Q->queneSize++;
}
//队头元素出队
void deleteQuene(Quene* Q,elemType* elem)
{
if(isEmptyQuene(Q))
printf("空队列,无法出队");
else
{
*elem=Q->first->elem;
Q->queneSize--;
Node* p=Q->first;
Q->first=p->next;
free(p);
p=NULL;
if(Q->queneSize==0)
Q->rear=NULL;
}
}
//返回队头元素
Node* getFrontQuene(Quene* Q,elemType *elem)
{
if(!isEmptyQuene(Q))
*elem=Q->first->elem;
return Q->first;
}
//返回队尾元素
Node* getRearQuene(Quene* Q,elemType *elem)
{
if(!isEmptyQuene(Q))
*elem=Q->rear->elem;
return Q->rear;
}
//清空队列
void clearQuene(Quene* Q)
{
elemType temp;
while(!isEmptyQuene(Q))
{
deleteQuene(Q,&temp);
}
}
//销毁队列
void destroyQuene(Quene* Q)
{
if(isEmptyQuene(Q))
printf("空队列,不用销毁\r\n");
else
clearQuene(Q);
free(Q);
Q=NULL;
}
//遍历队列
void displayQuene(Quene* Q)
{
printf("遍历队列:");
if(isEmptyQuene(Q))
printf("空队列\r\n");
else
{
Node* p=Q->first;
int i=Q->queneSize;
while(i--)
{
printf("%d\t",p->elem);
p=p->next;
}
printf("\r\n");
}
}
int main()
{
Quene* Q;
Q=createQuene();
int i,item;
printf("0-4依次入队并输出如下:\n");
for(i=0;i<5;i++)
{
enterQuene(Q,i);
getRearQuene(Q,&item);
printf("%d\t",item);
}
printf("\r\n");
displayQuene(Q);
/*printf("队列中元素依次出队列并输出如下:\n");
for(i=0;i<5;i++)
{
deleteQuene(Q,&item);
printf("%d\t",item);
}
printf("\r\n");
displayQuene(Q);*/
clearQuene(Q);
if(isEmptyQuene(Q))
printf("将队列置空成功\r\n");
displayQuene(Q);
destroyQuene(Q);
printf("队列已被销毁\r\n");
return 0;
}
队列(C语言)
最新推荐文章于 2024-07-25 17:43:13 发布