#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <iterator>
#include <initializer_list>
#include <deque>
#include <list>
#include <array>
#include <forward_list>
#include <sstream>
#include <stack>
#include <queue>
#include <algorithm>
#include <numeric>
#include <memory>
#include <map>
#include <set>
#include <unordered_map>
#include <unordered_set>
#include <functional>
#include <type_traits>
#include <utility>
#include <tuple>
#include <bitset>
#include <regex>
#include <random>
#include <iomanip>
#include <ctime>
#include <cmath>
#define ERROR -1
using namespace::std;
using ElementType = int;
#define ERROR -1
#define MAXSIZE 10
struct Node;
typedef Node* PtrToNode;
struct Node
{
ElementType Data;
PtrToNode Next;
};
typedef PtrToNode Position;
struct QNode;
typedef QNode* PtrToQNode;
struct QNode
{
Position front;
Position rear;
int MaxSize;
};
typedef PtrToQNode Queue;
Queue CreateQueue(int MaxSize)
{
Queue Q = (Queue)malloc(sizeof(QNode));
Q->front=NULL;
Q->rear=NULL;
Q->MaxSize = MaxSize;
return Q;
}
bool IsFull(Queue Q)
{
int cnt = 1;
Position now;
now = Q->front;
if (Q->rear == nullptr)
{
return false;
}
else
{
while (now != Q->rear->Next)
{
++cnt;
now = now->Next;
}
if (cnt >= Q->MaxSize)
return true;
else
return false;
}
}
bool AddQueue(Queue Q, ElementType X)
{
if (IsFull(Q))
{
cout << "The Queue is full.Invalid Addition." << endl;
return false;
}
else
{
PtrToNode addition = (PtrToNode)malloc(sizeof(Node));
addition->Data = X;
addition->Next = nullptr;
if (Q->rear == NULL)
{
Q->rear = addition;
}
else
{
Q->rear->Next = addition;
Q->rear = addition;
}
if (Q->front == NULL)
{
Q->front = addition;
}
return true;
}
}
bool IsEmpty(Queue Q)
{
return (Q->front == NULL);
}
ElementType DeleteQueue(Queue Q)
{
Position FrontCell;
ElementType FrontElem;
if (IsEmpty(Q))
{
cout << "The Queue is empty.Invalid delete." << endl;
return ERROR;
}
else
{
FrontCell = Q->front;
if (Q->front == Q->rear)
Q->front = Q->rear = NULL;
else
{
Q->front = Q->front->Next;
}
FrontElem = FrontCell->Data;
free(FrontCell);
return FrontElem;
}
}
void show(Queue Q)
{
if (IsEmpty(Q))
{
cout << "The Queue is empty.Invalid show." << endl;
return;
}
else
{
PtrToNode Pos;
Pos = Q->front;
while (Pos)
{
cout << Pos->Data << endl;
Pos = Pos->Next;
}
return;
}
}
int main()
{
Queue Q = CreateQueue(MAXSIZE);
AddQueue(Q, 3);
AddQueue(Q, 4);
AddQueue(Q, 5);
show(Q);
DeleteQueue(Q);
show(Q);
return 0;
}
数据结构第三章队列链式实现
最新推荐文章于 2021-01-05 18:05:59 发布