数据结构与算法C语言——队列的基本操作

数据结构与算法——队列

雨中漫步

任意输入队列长度和队列中的元素值,构造一个顺序循环队列,对其进行清空、插入新元素、返回队头元素以及删除队头元素操作。
代码实现:

#include <stdio.h>
#include <malloc.h>
#define MaxSize 100
typedef int ElemType;
typedef struct
{
	ElemType data[MaxSize];
	int front,rear;		//队首和队尾指针
} SqQueue;
void InitQueue(SqQueue *&q)
{	q=(SqQueue *)malloc (sizeof(SqQueue));
	q->front=q->rear=0;
}
void DestroyQueue(SqQueue *&q)
{
	free(q);
}
bool QueueEmpty(SqQueue *q)
{
	return(q->front==q->rear);
}
bool enQueue(SqQueue *&q,ElemType e)
{	if ((q->rear+1)%MaxSize==q->front)	//队满上溢出
		return false;
	q->rear=(q->rear+1)%MaxSize;
	q->data[q->rear]=e;
	return true;
}
bool deQueue(SqQueue *&q,ElemType &e)
{	if (q->front==q->rear)		//队空下溢出
		return false;
	q->front=(q->front+1)%MaxSize;
	e=q->data[q->front];
	return true;
}
bool GetQueue(SqQueue *q,ElemType &e)
{
    if(q->front==q->rear)
        return false;
    else
    {
        int x=q->front+1;
        e=q->data[x];
        return true;
    }                //取队头元素
}
int main()
{
    SqQueue *s;
    InitQueue(s);
    int L,e,a,n;
    printf("请输入队长和队的元素值\n");
    scanf("%d",&L);
    while(L--)
    {
        scanf("%d",&e);
        enQueue(s,e);
    }
    n=20;
    while(n--)
    {
        printf("清空请按1,销毁请按2,进队请按3,出队请按4,返回队头请按5,结束请按6\n");
        scanf("%d",&a);
        if(a==1)
        {
            InitQueue(s);
            printf("清空成功!\n");
        }
        if(a==2)
        {
            DestroyQueue(s);
            printf("销毁成功!\n");
        }
        if(a==3)
        {
            printf("请输入队元素\n");
            scanf("%d",&e);
            if(enQueue(s,e))
            printf("进队成功!\n");
        }
        if(a==4)
        {
            if(deQueue(s,e))
            printf("出队成功!\n");
        }
        if(a==5)
        {
            if(GetQueue(s,e))
                printf("队头元素为%d\n",e);
        }
        if(a==6)
        {
           break;
        }
    }
}


发布了12 篇原创文章 · 获赞 7 · 访问量 350

猜你喜欢

转载自blog.csdn.net/abcwsp/article/details/103547028