《数据结构与程序设计》02-Queues

本文深入探讨了队列数据结构的实现与应用,详细讲解了队列的基本概念,包括队头和队尾的概念,以及队列的先进先出特性。通过具体的C++代码示例,展示了如何使用循环数组实现队列,并提供了append、serve、retrieve等关键操作的实现细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

队列(先进先出):所有的增加在表的一端进行,所有的删除都在表的另一端进行。
队头(front):第一个将从队列中删除的元素称为队头。
队尾(reartail):队列中的最后一个元素,即最近加入的一个元素称为队尾。

队列的实现:

  1. 头文件Queue.h
#include <iostream>
#include <cstdio>
#define MAXSIZE 10
using namespace std;

enum Error_code{    
	overflow, underflow, success
};

typedef char Queue_entry;

class Queue{
public:    
	//建立队列并将其初始化为空
	Queue();  
	bool empty() const;
	//如果队列有空间,则将元素添加到队尾    
	Error_code append(const Queue_entry & item);
	//如果队列非空,则删除队头的元素
	Error_code serve();
	//如果队列非空,则队头的元素记为item
	Error_code retrieve(Queue_entry & item) const;
private:    
	int rear, front;    
	int count;    
	Queue_entry entry[MAXSIZE];
};

  1. 具体函数实现Queue.cpp
    思想:使用循环数组
Queue::Queue(){    
	count = 0;    
	rear = MAXSIZE - 1;    
	front = 0;
}

bool Queue::empty() const{   
	return count == 0;
}

Error_code Queue::append(const Queue_entry & item){    
	if(count >= MAXSIZE) return overflow;    
	count ++;    
	rear = ((rear + 1) == MAXSIZE) ? 0 : (rear + 1);    
	entry[rear] = item;    
	return success;
}

Error_code Queue::serve(){    
	if(count <= 0) return underflow;    
	count --;    
	front = ((front + 1) == MAXSIZE) ? 0 : (front + 1);    
	return success;
}

Error_code Queue::retrieve(Queue_entry & item) const{    
	if(count <= 0) return underflow;    
	item = entry[front];    
	return success;
}

补充的其它函数:
size()函数、clear()函数、serve_and_retrieve()函数

void Queue::size() const{
	return count;
}

void Queue::clear(){
	count = 0;
	front = 0;
	rear = MAXSIZE - 1;
}

Error_code Queue::serve_and_retrieve(Queue_entry & item){    
	if(count == 0) return underflow;
	else{
		count --;
		item = entry[front];
		front = ((front + 1) == MAXSIZE) ? 0 : (front + 1);
	}  
	return success;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值