顺序队中实现队列的基本运算

【代码】//文件名:sqqueue.cpp

#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=-1;       //这里和环形队不同
}
void DestroyQueue(SqQueue *q)    //销毁队
{	free(q);
}
bool QueueEmpty(SqQueue *q)     //判断队是否为空
{	return q->front==q->rear;
}
bool EnQueue(SqQueue *q,ElemType e)   //进队
{	if(q->rear==MaxSize-1)//
		return false;//
	q->rear++;//
	q->data[q->rear]=e;
	return true;
}
bool DeQueue(SqQueue *q,ElemType &e)   //出队
{	if(q->front==q->rear)//
		return false;
	q->front++;
	e=q->data[q->front];
	return true;
}


设计一个C++程序实现顺序队列(也称为线性队列),我们需要创建一个包含队头和队尾指针的数据结构,并提供一些基本操作,如入队(enqueue)、出队(dequeue)以及查看队列是否为空(is_empty)和获取队列长度(get_size)。以下是简化的顺序队实现: ```cpp #include <iostream> template<typename T> class Queue { private: T* items; // 存储元素的数组 int front; // 队首位置 int rear; // 队尾位置 public: // 构造函数 Queue(int size) : items(new T[size]), front(0), rear(size - 1) {} // 插入元素到队尾 void enqueue(T value) { if (rear == front) { std::cout << "Queue is full.\n"; return; } rear = (rear + 1) % size; // 使用循环索引来避免数组越界 items[rear] = value; } // 从队首删除并返回元素 T dequeue() { if (front == rear) { std::cout << "Queue is empty.\n"; return T(); // 返回默认值或者抛异常 } T value = items[front]; front = (front + 1) % size; return value; } // 检查队列是否为空 bool isEmpty() const { return front == rear; } // 获取队列当前的大小 int getSize() const { return rear >= front ? rear - front + 1 : size - front; } // 析构函数,释放内存 ~Queue() { delete[] items; } }; int main() { Queue<int> queue(5); queue.enqueue(1); queue.enqueue(2); queue.enqueue(3); std::cout << "Size of the queue: " << queue.getSize() << "\n"; std::cout << "Dequeued element: " << queue.dequeue() << "\n"; std::cout << "Is queue empty? " << (queue.isEmpty() ? "Yes" : "No") << "\n"; return 0; } ``` 在这个例子中,我们使用了模板允许存储任意类型的元素。队列满、空的检查分别通过比较`front`和`rear`来实现。`enqueue`和`dequeue`操作使用环形缓冲区来避免边界问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值