您的位置:首页 > 理论基础 > 数据结构算法

数据结构之队列顺序表示与实现2

2017-07-27 20:16 375 查看
针对上一节队列顺序表示的缺点,做了少许改进,队列出队时无需大量移动元素

#include <iostream>
using namespace std;

#define QUEUE_INIT_SIZE 10
#define QUEUE_INCREMENT_SIZE 2

typedef int DataType;

struct SqQueue2
{
DataType* base;
int front;
int rear;
int queuesize;
};

//队列的初始化
bool SqQueue2Init(SqQueue2& Q)
{
Q.base = (DataType*)malloc(sizeof(DataType));
if (!Q.base)
{
cout << "malloc error" << endl;
return false;
}

Q.front = Q.rear = 0;
Q.queuesize = QUEUE_INIT_SIZE;
return true;
}

//销毁队列
void SqQueue2Destroy(SqQueue2& Q)
{
free(Q.base);
Q.base = NULL;
Q.front = Q.rear = 0;
Q.queuesize = 0;
}

//清空队列
void SqQueue2Clear(SqQueue2& Q)
{
Q.front = Q.rear = 0;
}
//获取队列长度
int SqQueue2Length(SqQueue2 Q)
{
return(Q.rear - Q.front);
}
//获取队头
bool SqQueue2GetHead(SqQueue2 Q,DataType& e)
{
if (Q.rear == Q.front)
return false;

e = Q.base[Q.front];
return true;
}
//入队
bool SqQueue2Insert(SqQueue2& Q,DataType e)
{
if (Q.rear >= Q.queuesize)
{
Q.base = (DataType*)realloc(Q.base, (Q.queuesize + QUEUE_INCREMENT_SIZE) * sizeof(DataType));
if (!Q.base)
{
cout << "realloc error" << endl;
return false;
}

Q.rear = Q.queuesize;
Q.queuesize += QUEUE_INCREMENT_SIZE;
}

Q.base[Q.rear++] = e;
return true;
}
//出队
bool SqQueue2Delete(SqQueue2& Q, DataType& e)
{
if (Q.rear == Q.front)
return false;
e = Q.base[Q.front];
Q.front++;

return true;
}
//队列的遍历
void SqQueue2Traverse(SqQueue2 Q, void(*visit)(DataType))
{
while (Q.front < Q.rear)
{
visit(Q.base[Q.front++]);
}

cout << endl;
}

void visit(DataType c)
{
cout << " " << c;
}

void main()
{
DataType e0;
SqQueue2 Q;

SqQueue2Init(Q);

cout << "向队列中插入元素为:";
for (int i = 1; i <= 5; i++)
{
SqQueue2Insert(Q,i);
}
SqQueue2Traverse(Q,visit);

cout << "此时队列的长度为:" << SqQueue2Length(Q) << endl;

SqQueue2GetHead(Q,e0);
cout << "队列的队头为:" << e0 << endl;

SqQueue2Delete(Q,e0);
cout << "队头出队后,队列的长度为:" << SqQueue2Length(Q) << endl;
cout << "队头出队后,队列元素为:";
SqQueue2Traverse(Q,visit);

SqQueue2Clear(Q);
cout << "清空队列后,队列的长度为:" << SqQueue2Length(Q) << endl;

system("pause");
}




由程序分析,尽管本程序在队列出队时不需要大量移动元素,但是当队列元素较多进行操作是比较浪费空间
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息