数据结构-循环顺序队列的基本操作

//循环顺序队列的基本操作

#include <iostream>
#include <string.h>
using namespace std;

#define MAXLEN 8
#define datatype char
#define Status int
typedef struct{
	datatype s[MAXLEN];
	int front;				//记录队首的指针
	int rear;				//记录队尾的指针
}SeqQueue;

//初始化
Status InitSeqQueue(SeqQueue &sq)
{
	sq.front=-1;
	sq.rear=-1;
	return 1;
}
//判空
Status IsEmpty(SeqQueue sq)
{	//若空,返回1;否则返回0
	if(sq.front==sq.rear) return 1;
	else return 0;
}
//判满
Status IsFull(SeqQueue sq)
{	//若队满,返回1;
	if(sq.front==(sq.rear+1)%MAXLEN) return 1;
	else return 0;
}
//入栈
Status InQueue(SeqQueue &sq,datatype x)
{
	//判断队列满
	if(sq.front==(sq.rear+1)%MAXLEN) return 0;

	sq.rear++;
	sq.s[sq.rear]=x;

	return 1;
}
//出栈
Status OutQueue(SeqQueue &sq,datatype &x)
{	//若对空,返回0;出队成功返回1;
	//判断对空
	if(sq.front==sq.rear) return 0;
	//出队
	sq.front++;
	x=sq.s[sq.front];
	return 1;
}
//显示栈元素
Status ShowQueue(SeqQueue &sq)
{
	if(sq.front==sq.rear) return 0;
	int i=sq.front;
	while(i!=sq.rear)
	{
		i++;
		cout<<sq.s[i]<<" ";

	}
	cout<<endl;
	return 1;
}
//读栈首元素
Status ReadQueue(SeqQueue &sq,datatype &x)
{
	if(IsEmpty(sq)) return 0;	//若队列空,返回0
	sq.front++;
	x=sq.s[sq.front];
	return 1;
}

//求队列长度

int main()
{
	cout<<"队列初始化"<<endl;
	SeqQueue SQ;
	InitSeqQueue(SQ);

	cout<<"入队"<<endl;
	InQueue(SQ,‘a‘);
	InQueue(SQ,‘b‘);
	InQueue(SQ,‘c‘);

	cout<<"显示队列元素:"<<endl;
	ShowQueue(SQ);

	datatype x;
	cout<<"出队:"<<endl;
	OutQueue(SQ,x);

	cout<<"显示队列元素:"<<endl;
	ShowQueue(SQ);

	cout<<"读取队首元素:"<<endl;
	ReadQueue(SQ,x);
	cout<<x<<endl;
	return 0;
}

----------------------------------------------------------
输出结果:
队列初始化
入队
显示队列元素:
a b c
出队:
显示队列元素:
b c
读取队首元素:
b
Press any key to continue . . .

鲜少伟

2016-4-18

时间: 2024-10-08 10:13:21

数据结构-循环顺序队列的基本操作的相关文章

数据结构-循环顺序队列&amp;链队列

队列接口实现: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _003_队列 { interface IQueue<T> { int Count { get; } int GetLength(); bool IsEmpty(); void Clear(); void Enqueue(T it

数据结构6_顺序队列(循环队列)

本文实现了顺序队列,与链队列不同的是,顺序队列需要考虑一个问题, 问题情况如下, 解决办法:循环队列,当rear到分配的数组空间末尾时,转到数组头 但是当q.rear==q.front时,又如何区分一种是空队列,一种是满队列的情况呢 这里有两种方案 本次代码实现了第一种方法,同时设置了一个技术变量length,稍加改动便可实现第二个方法 代码如下: #include<iostream>using namespace std;//该顺序队列为循环队列,解决队尾指针达到最大值,队列中有空闲单元,但

C++循环顺序队列

顾名思义:采用顺序结构存放的队列称为顺序队列 循环顺序队列可以避免队列的假溢出现象的发生.如下图示,循环队列的几种特殊情况. 学习完顺序循环队列个人感觉应该注意的事项: front.rear只是表示在base[i]这个顺序表中的索引值,而不是内存的绝对地址,这样也才在后面的循环的时候处理起来比较方便 队列循环的关键 front=(front+1)%queueSize; 下面是个人的循环队列操作工程文件: //////////////////////////////////////////////

【小白成长撸】--循环顺序队列

1 // 循环顺序队列.cpp : 定义控制台应用程序的入口点. 2 //适合整数 3 4 #include "stdafx.h" 5 #include<stdio.h> 6 7 #define MAXNUM 100 8 #define true 1 9 #define false 0 10 11 typedef struct queue_type 12 { 13 int queue[MAXNUM];//队列的最大值为100 14 int front;//头指针 15 in

循环顺序队列

#include<iostream> using namespace std; const int MAXQSIZE = 5; //队列类 template<class T> struct LinkList { T * data;//指向连续的数据存储区域 int front;//头指针 指向第一个元素 int rear;//尾指针 如果队列不为空指向最后元素的下一个位置 }; //构造一个空队列 template<class T> void InitQueue(Lin

【数据结构】顺序队列的实现(c++)

头文件: #pragma once #include <iostream> #include <assert.h> using namespace std; template<class Type> class SeqQueue { public: SeqQueue(size_t sz = INIT_SZ); ~SeqQueue(); public: bool empty()const; bool full()const; void show()const; bool

顺序队列的基本操作

1 #include<stdio.h> 2 #include<stdlib.h> 3 #define MAXSIZE 10 4 5 typedef int ElemType; 6 //队列结构体 7 typedef struct{ 8 ElemType data[MAXSIZE]; 9 int front,rear;//队头与队尾指针 (实际就是两个变量) 10 }SqQueue; 11 //初始化顺序队列 12 int InitQueue(SqQueue *S){ 13 S-&g

数据结构:顺序表的基本操作

顺序表作业: #include <iostream> #include <cstdio> #include <cstdlib> using namespace std; typedef int T; class SeqList{ private: T *data; int MaxSize; ///顺序表最多可以存放的元素个数. int last; ///顺序表最后一个元素的下标,初始值为-1. public: SeqList(int sz); void Input();

【C++/数据结构】顺序表的基本操作

<span style="font-size:18px;"><strong>#pragma once #include <iostream> using namespace std; typedef enum { FALSE, TRUE }Status; template<class Type> class SeqList { public: SeqList(int sz = DefaultSize) { capacity = sz &g