数据结构-顺序队列

/*----------------------------------------------------------------
设立一个队首指针front ,一个队尾指针rear ,分别指向队首和队尾元素。

  初始化:front=rear=0。
  队列为空:front=rear。
  队满:rear=MaxSize。
  入队:将新元素插入rear所指的位置,然后rear加1。
  出队:删去front所指的元素,然后加1并返回被删元素。
  取队首元素:返回fornt指向的元素值
 -----------------------------------------------------------------*/

#include <stdio.h>
#include <assert.h>
#include <Windows.h>

#define MaxSize 10  //队列的最大容量

typedef int DataType;  //队列中元素类型
typedef struct Queue
{
    DataType Queue[MaxSize];
    int fornt;   //队头指针
    int rear;    //队尾指针
}SeqQueue;

//队列初始化,将队列初始化为空队列
void InitQueue(SeqQueue* SQ)
{
    SQ->fornt = SQ->rear = 0;  //把对头和队尾指针同时置0
}

//判断队列为空

int IsEmpty(SeqQueue* SQ)
{
    if (SQ->fornt == SQ->rear)
    {
        return 1;
    }
    return 0;
}

//判断队列是否为满

int IsFull(SeqQueue* SQ)
{
    if (SQ->rear == MaxSize)
    {
        return 1;
    }
    return 0;
}

//入队,将元素data插入到队列SQ中

void EnterQueue(SeqQueue* SQ, DataType data)
{
    if (IsFull(SQ))
    {
        printf("队列已满\n");
      
    }
    SQ->Queue[SQ->rear] = data;  //在队尾插入元素data
    SQ->rear = SQ->rear + 1;     //队尾指针后移一位
}

//出队,将队列中队头的元素data出队,出队后队头指针front后移一位
int DeleteQueue(SeqQueue* SQ, DataType* data)
{
    if (IsEmpty(SQ))
    {
        printf("队列为空!\n");
        return 0;
    }
    *data = SQ->Queue[SQ->fornt];   //出队元素值
    SQ->fornt = (SQ->fornt) + 1;      //队尾指针后移一位
    return 1;
}

//获取队首元素

int GetHead(SeqQueue* SQ, DataType* data)
{
    if (IsEmpty(SQ))
    {
        printf("队列为空!\n");
    }
    return *data = SQ->Queue[SQ->fornt];
}

//清空队列

void ClearQueue(SeqQueue* SQ)
{
    SQ->fornt = SQ->rear = 0;
}

//打印队列中的与元素

void PrintQueue(SeqQueue* SQ)
{
    assert(SQ);
    int i = SQ->fornt;
    while (i < SQ->rear)
    {
        printf("%-3d", SQ->Queue[i]);
        i++;
    }
    printf("\n");
}
int main()
{
    SeqQueue SQ;
    DataType data;
    //初始化队列
    InitQueue(&SQ);
    //入队
    EnterQueue(&SQ, 1);
    EnterQueue(&SQ, 2);
    EnterQueue(&SQ, 3);
    EnterQueue(&SQ, 4);
    EnterQueue(&SQ, 5);
    EnterQueue(&SQ, 6);
    EnterQueue(&SQ, 8);
    EnterQueue(&SQ, 10);
    EnterQueue(&SQ, 12);
    EnterQueue(&SQ, 15);
    EnterQueue(&SQ, 16);

    //打印队列中的元素
    printf("队列中的元素为:");
    PrintQueue(&SQ);
    printf("\n");
    //出队
    DeleteQueue(&SQ, &data);
    printf("出队元素为:%d\n", data);
    printf("\n");
    DeleteQueue(&SQ, &data);
    printf("出队元素为:%d\n", data);
    printf("\n");
    printf("队列中的元素为:");
    PrintQueue(&SQ);
    printf("\n");
    //获取队首元素
    data = GetHead(&SQ, &data);
    printf("队首元素为:%d\n", data);
    printf("#元素16入队#\n");
    //元素16入队
    EnterQueue(&SQ, 16);
    printf("队列中的元素为:");
    PrintQueue(&SQ);
    printf("\n");
    system("pause");
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值