顺序队列基础操作

//定义顺序循环队列-数组
#include <stdio.h>
#define MaxSize 15
typedef struct {
	int data[MaxSize];
	int front, rear;
}SqQueue;//顺序队列

typedef struct LinkNode{
	int data;
	struct LinkNode* next;
	/*定义一个指向 struct LinkNode 类型的指针 next 。
	在结构体内部,通过这种方式可以方便地指向下一个相同类型的节点,
	从而构建链表结构。*/
}LinkNode;//队列链结点
typedef struct  {
	LinkNode* front,*rear;
	//前面已经使用 typedef 为 struct LinkNode 定义了一个新的类型名 LinkNode 。
	//	所以在后续的代码中,可以直接使用 LinkNode* 来表示指向该结构体类型的指针。
}LinkQuene;//链队列

下面是源文件

#include "定义循环队列和链队列.cpp"
void InitQueue(SqQueue& q) {
	q.front = q.rear = 0;
}//初始化
bool isEmpty(SqQueue q) {//判空
	return q.front == q.rear;
}
bool isFull(SqQueue q) {//判满
	return (q.rear + 1) % MaxSize == q.front;
}
bool EnQueue(SqQueue &q,int x) {//入队列
	if (isFull(q)) {
		printf("队满");
		return false;
	}
	else {
		q.data[q.rear] = x;
		q.rear = (q.rear + 1) % MaxSize;
		return true;
	}
}
bool DeQueue(SqQueue& q, int &x) {//出队
	if (isEmpty(q)) {
		printf("队空");
		return false;
	}
	else {
		x = q.data[q.front];
		q.front = (q.front + 1) % MaxSize;
		return true;
	}

}
bool GetQueue(SqQueue q,int &x) {//读队头
	if (isEmpty(q)) {
		printf("队空");
		return false;
	}
	else {
		x = q.data[q.front];
		return false;
	}
}
bool AllGet(SqQueue q, int& x) {//遍历
	if (isEmpty(q)) {
		printf("队空");
		return false;
	}
	else {
		int index = q.front;
		while (index != q.rear) {
			x = q.data[index];
			printf("元素: %d\n", x);
			index = (index + 1) % MaxSize;
		}
		return true;
	}
}



int main() {
    SqQueue q;
    int choice, x;

    InitQueue(q);  // 初始化队列

    printf("请选择操作:\n");
    printf("1. 入队列\n");
    printf("2. 出队列\n");
    printf("3. 遍历队列\n");
    printf("4. 读队头\n");
    printf("0. 退出\n");

    scanf_s("%d", &choice);

    while (choice != 0) {
        switch (choice) {
        case 1:
            printf("请输入要入队列的元素值: ");
            scanf_s("%d", &x);
            if (EnQueue(q, x)) {
                printf("入队列成功! \n");
            }
            else {
                printf("入队列失败!\n");
            }
            break;
        case 2:
            if (DeQueue(q, x)) {
                printf("出队列元素为: %d\n", x);
            }
            else {
                printf("出队列失败,队列为空!\n");
            }
            break;
        case 3:
            AllGet(q, x);
            break;
        case 4:
            if (GetQueue(q, x)) {
                printf("队头元素为: %d\n", x);
            }
            else {
                printf("读队头元素失败!\n");
            }
            break;
        case 0:
            break;
            return 0;
        default:
            printf("无效的选择,请重新输入!\n");
        }
        printf("\n请选择操作:\n");
        scanf_s("%d", &choice);
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

偏正北海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值