C语言实现对队列的基本操作

C语言实现对队列的基本操作

代码思想:

(1)定义循环队列:rear指针指向队列的最后一个元素所在位置,front指针则指向第一个元素的前一个位置。并且rear和front都只能单方向移动。
(2)入队操作:先判断队列是否溢出->在队尾插入需要插入的元素作为新的队尾。
(3)出队和取队头操作:判断队列是否为空->删除队头元素,并返回该元素->front+1;

代码实现的功能:

1.插入队列 2.取出队列 3.取出队头元素 4.判断是否为空队列 5.清空该队列

代码内容:

#include<stdio.h>
#include<stdlib.h>
typedef int boolean;
#define true 1
#define false 0
typedef struct queue{
    int element[50];
    int rear;
    int front;
}*Squeue,Queue;
void InsQueue(Squeue q){
    int num,i=0,record=0;
    printf("请输入您想入队的元素个数:");
    scanf("%d",&num);
    for(i;i<num;i++)
    {
        printf("请输入第%d个元素:",i+1);
        if(++q->rear<=9)
        {
            if(q->rear==q->front&&record==1)
            {
                printf("数据溢出\n");
                system("pause");
                exit(1);
            }
            else if(q->rear==q->front)
            {
                record++;
            }
            scanf("%d",&q->element[q->rear]);
        }
        else
        {
            q->rear-=10;
            scanf("%d",&q->element[q->rear]);
            if(q->rear==q->front)
            {
                printf("数据溢出\n");
                system("pause");
                exit(1);
            }
        }
    }
}
void DelQueue(Squeue q){
    if(IsEmpty(q)){
        printf("不存在队列\n");
        q->front=0;
    }else{
        printf("队列为:");
        do{
            printf("%d-->",q->element[q->front]);
            q->front++;
        }while(!IsEmpty(q));
        printf("end\n");
    }
}
void GetFront(Squeue q)
{
    int i;
    if(IsEmpty(q))
        printf("不存在该队列\n");
    else
      printf("队首元素为:%d\n",q->element[q->front]);

}
boolean IsEmpty(Squeue q){
    if(q->rear==-1||q->front-1==q->rear)
        return true;
    else
        return false;
}
void EnEmpty(Squeue q){
    q->front=0;
    q->rear=-1;
    printf("sucess!\n");
}
void main(){
    int input;
    Squeue q;
    q=(Squeue)malloc(sizeof(Queue));
    q->front=0;
    q->rear=-1;
    while(1)
    {
        printf("1.Insert Queue\n");
        printf("2.Get Queue\n");
        printf("3.Get   Front\n");
        printf("4.IS queue empty?\n");
        printf("5.Clear Queue\n");
        printf("6.Exit\n");
        scanf("%d",&input);
        switch(input)
        {
        case 1:
            InsQueue(q);
            break;
        case 2:
            DelQueue(q);
            break;
        case 3:
            GetFront(q);
            break;
        case 4:
            if(IsEmpty(q))
                printf("不存在该队列\n");
            else
                printf("存在该队列\n");
            break;
        case 5:
            EnEmpty(q);
            break;
        case 6:
            exit(0);
        default :
                printf("input error!\n");
                break;
        }
    }
}

测试截图:
1.插入和取出队列:
这里写图片描述
2.取队头元素:
这里写图片描述
3.判断是否为空队列:
这里写图片描述

posted @ 2018-01-29 18:49  Newtol  阅读(2107)  评论(0编辑  收藏  举报