數據結構學習記錄連載9(隊列的學習)
基本要求:
1) 建立順序循環隊列類SeqQueue。
2) 編寫程序判斷一個字符序列是否是回文。
提高要求:
1) 建立鏈式循環隊列類LinQueue。
2) 編寫程序判斷一個字符序列是否是回文。
1.SeqQueue.h:順序循環隊列類的定義與實現
/*
* Copyright (c) 2009,FreshAir團隊嵌入式軟件研發組
* All rights reserved.
*
* 文件名稱:SeqQueue.h
* 摘 要: 順序循環隊列類的定義與實現
*
* 當前版本:1.0
* 作 者: 吳友強
* 完成日期:2009年10月18日
*
* 取代版本:
* 原作者 :
* 完成日期:
*/
#include <iostream.h>
#include <stdlib.h>
const int MaxQueueSize = 100;
class SeqQueue
{
private:
DataType data[MaxQueueSize];
int front;
int rear;
int count;
public:
SeqQueue (void) // 構造函數,空隊列
{
front = rear = 0;
count = 0;
};
~SeqQueue (void)
{}; //析構函數
void QueueInsert(const DataType& item); //入隊列
DataType QueueDelete(void); //出隊列
DataType QueueFrontData(void) const; //讀隊頭元素值
int QueueIsEmpty(void) const //判隊列是否為空
{
return front == rear ? 1 : 0;
};
void ClearSeqQueue(void) //清空隊列
{
front = rear = 0;
count = 0;
};
int GetQueueSize(void) const //取隊列元素個數
{
return count;
};
};
void SeqQueue::QueueInsert(const DataType& item)
{
if (front == MaxQueueSize)
{
cout << "隊列已滿" << endl;
exit(0);
}
data[rear] = item;
rear = (rear + 1) % MaxQueueSize;
count++;
}
DataType SeqQueue::QueueDelete(void) //出隊列
{
DataType temp;
if (count == 0)
{
cout << "隊列空!" << endl;
exit(0);
}
temp = data[front];
front = (front + 1)%MaxQueueSize;
count--;
return temp;
}
DataType SeqQueue::QueueFrontData(void) const //讀隊頭元素值
{
if (count == 0)
{
cout << "隊列空!" << endl;
exit(0);
}
return data[front];
}
2.SeqStackTest.cpp:測試順序隊列的功能,實現判斷是否回文
/*
* Copyright (c) 2009,FreshAir團隊嵌入式軟件研發組
* All rights reserved.
*
* 文件名稱:SeqStackTest.cpp
* 摘 要: 測試順序隊列的功能,實現判斷是否回文
*
* 當前版本:1.0
* 作 者: 吳友強
* 完成日期:2009年10月18日
*
* 取代版本:
* 原作者 :
* 完成日期:
*/
#include <stdlib.h>
#include <iostream.h>
#include <string.h>
typedef char DataType;
#include "SeqQueue.h"
#include "SeqStack.h"
int main(void)
{
SeqStack myStack;
SeqQueue myQueue;
char str[80];
cout << "輸入字符序列,回車換行符結束:" << endl;
cin.getline(str, 80);
int h = strlen(str);
for (int i=0; i<h; i++)
{
myQueue.QueueInsert(str[i]);
myStack.Push(str[i]);
}
while (!myQueue.QueueIsEmpty())
{
if (myQueue.QueueDelete() != myStack.Pop())
{
cout << "不是回文" << endl;
return 0;
}
}
cout << "是回文" << endl;
return 0;
}
說明:用到的堆棧頭文件是前面實現的。
浙公網安備 33010602011771號