チェーンは列と行列の原理を実現します.
列---チェーン実現はキューを作成し、 を初期化する.入隊と出隊 キューおよびキュー要素取得 をクリアする.
キューを作成して初期化します.
入隊と出隊
キューおよびキュー要素の取得を空にします.
:
: --
前のセクション:キュー-行列の実装キューを作成して初期化します.
入隊と出隊
キューおよびキュー要素の取得を空にします.
1.
#include
#include
#include
#define MaxSize 5 //
using namespace std;
typedef int DataType;
typedef struct _Qnode {
DataType data; //int data
struct _Qnode* next;
}QNode;
typedef QNode* QueuePtr;
typedef struct Queue {
int length; //
QueuePtr fron; // Qnode* fron
QueuePtr rear; // Qnode* rear
}LinkQueue;
//
bool InitQueue(LinkQueue*LQ){
if (!LQ) return false;
LQ->length = 0; //
LQ->fron = LQ->rear = NULL; //
return true;
}
2.0 :
, , ,
next NULL, , ,
,
qNode, ,
++ ok
:
//
bool FullQueue(LinkQueue* LQ) {
if (!LQ) return false;
if (LQ->length == MaxSize) return true;
return false;
}
//
bool EmptyQueue(LinkQueue* LQ) {
if (!LQ) return false;
if (LQ->fron == NULL) return true;
return false;
}
bool EnterQueue(LinkQueue* LQ, DataType data) {
if (!LQ) return false;
//
if (FullQueue(LQ)) {
cout << " :" << data << " !" << endl;
return false;
}
//
QNode* qNode = new QNode;
//
qNode->data = data;
// next 0
qNode->next = NULL;
//
if (EmptyQueue(LQ)) {
LQ->fron = LQ->rear = qNode;
} else {
// :
//
LQ->rear->next = qNode;
//
LQ->rear = qNode;
}
// ++
LQ->length++;
return true;
}
2.1 :
, , ,
, ,
, --, 。
//
bool DeleteQueue(LinkQueue* LQ, DataType* data) {
//
QNode* tmp = NULL;
//
if (!LQ || EmptyQueue(LQ)) {
cout << " " << endl;
return false;
}
//
if (!data) return false;
//
tmp = LQ->fron;
//
LQ->fron = tmp->next;
// ,
if (!LQ->fron) LQ->rear = NULL;
*data = tmp->data;
LQ->length--;
//
delete tmp;
return true;
}
3.0 :
, ,
, , ,
NULL
//
bool ClearQueue(LinkQueue* LQ) {
if (!LQ) return false;
while (LQ->fron) {
//
QueuePtr tmp = LQ->fron->next;
//
delete LQ->fron;
//
LQ->fron = tmp;
}
// NIULL
LQ->fron = LQ->rear = 0;
// NULL
LQ->length = 0;
return true;
}
3.1 :
LQ->length
//
bool GetLength(LinkQueue* LQ) {
if (!LQ) return false;
// length
return LQ->length;
}
:
//
void Print(LinkQueue* LQ) {
QueuePtr tmp;
if (!LQ) return;
// tmp
tmp = LQ->fron;
while (tmp) {
//
cout << setw(4) << tmp->data;
//
tmp = tmp->next;
}
cout << endl;
}
main:
int main(void) {
LinkQueue* LQ = new LinkQueue;
DataType data = -1;
//
InitQueue(LQ);
//
for(int i=0; i<7; i++){
EnterQueue(LQ, i);
}
//
cout << " << GetLength(LQ) << " >" << endl;
Print(LQ);
cout << endl;
//
for (int i = 0; i < 7; i++) {
if (DeleteQueue(LQ, &data)) {
cout << " :" << data << endl;
}
else {
cout << " !" << endl;
}
}
//
cout << " :" << GetLength(LQ) << " " << endl;
Print(LQ);
cout << endl;
if (ClearQueue(LQ)) {
cout << " !" << endl;
}
else {
cout << " " << endl;
}
Print(LQ);
//
delete LQ;
system("pause");
return 0;
}