링크 는 대기 행렬 과 대기 행렬 원 리 를 실현 한다.
:
: --
이전 절: 대기 열 – 배열 구현
대기 열 생 성 및 초기 화
입 대 · 출 대
대기 열 및 대기 열 요소 비우 기
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;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.