//队列的基本操作
//队列只用一次动态分配内存,也就是说在一个内存单元里存储元素,所以要用到数组存储
//有一些小细节要注意
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
typedef struct Queue
{
int *base;//设为int是在后面的赋值中起作用
int len;
int front;
int rear;
}QUEUE,*pQueue;
void init(pQueue pQ,int len); //初始化
int in(pQueue pQ); //入列
void out(pQueue pQ,int *val); //出列
void printqueue(pQueue pQ); //打印队列
bool Is_empty(pQueue pQ); //判断为空
bool Is_full(pQueue pQ); //判断为满
int main()
{
//pQueue q;//会产生野指针
QUEUE q;
int len1,num=0;
int val;
//----------------
printf("请输入要存储几个元素:");
scanf("%d",&len1);
init(&q,len1);
while (len1)
{
if(!in(&q))
break;
}
printqueue(&q);
//----------------
printf("输入要出列几位元素:");
scanf("%d",&num);
printf("出列元素为:\n");
while (num--)
{
out(&q,&val);
printf("%d",val);
}
printf("\n");
//---------------
printqueue(&q);
return 0;
}
void init(pQueue pQ,int len)
{
pQ->base=(int *)malloc(sizeof(Queue)+sizeof(int)); //不可以用(pQueue) malloc 类型转换出问题了。
if (pQ->base== NULL)
{
printf("分配内存失败\n");
exit(-1);
}
pQ->front=pQ->rear=0;
pQ->len=len;
}
int in(pQueue pQ)
{
if(Is_full(pQ))
{
printf("队列已满\n");
return 0;
}
printf("输入入列元素:");
int val;
scanf("%d",&val);
pQ->base[pQ->rear]=val;
pQ->rear++;
return 1;
}
void out(pQueue pQ,int *val)
{
if (Is_empty(pQ))
{
printf("队列为空\n");
return ;
}
*val=pQ->base[pQ->front];
pQ->front++;
}
void printqueue(pQueue pQ)
{
if (Is_empty(pQ))
{
printf("队列为空\n");
return ;
}
int t=pQ->front;
printf("列元素为:");
while (t != pQ->rear)
{
printf("%d",pQ->base[t]);
t++;
}
printf("\n");
}
bool Is_full(pQueue pQ)
{
return (pQ->rear+1)%pQ->len==pQ->front;
}
bool Is_empty(pQueue pQ)
{
return pQ->front==pQ->rear;
}
队列的基本操作
最新推荐文章于 2022-07-08 21:52:40 发布