这是对于Queue类的实现
PS:这是队列链式存储(带头节点)的类和模板实现,静态循环序列本质也只是封装类和套模板
class Stack实现代码如下:
myqueue.h
#include<stdio.h>
#include<stdlib.h>
struct Node
{
char data;
Node* next;
};
struct Queue
{
Node*front;
Node*rear;
};
class myqueue
{
public:
myqueue();
~myqueue();
bool enQueueEmpty();
void enQueue(char ch);
char deQueue();
void resetQueue();
private:
Queue*q;
};
myqueue.cpp
#include "myqueue.h"
myqueue::myqueue()
{
q->front=q->rear=(Node*)malloc(sizeof(Node));
q->front->next=NULL;
}
myqueue::~myqueue()
{
resetQueue();
free(q->front);
}
bool myqueue::enQueueEmpty()
{
return q->front==q->rear;
}
void myqueue::enQueue(char ch)
{
Node*cur = (Node*)malloc(sizeof(Node));
cur->data=ch;
cur->next=NULL; //插尾巴上,类似于尾插法
q->rear->next=cur;
q->rear=cur;
}
char myqueue::deQueue()
{
char ch=q->front->next->data;
if(q->front->next==q->rear) //若为空队列
{
q->rear=q->front;
free(q->front->next);
q->front->next=NULL;
}
else
{
Node* cur=q->front->next;
q->front->next=cur->next;
free(cur);
}
return ch;
}
void myqueue::resetQueue()
{
Node*head=q->front->next;
q->front->next=NULL;
q->rear=q->front;
Node * t;
while(head)
{
t=head;
head=head->next;
free(t);
}
}
main函数
#include <iostream>
#include "myqueue.h"
using namespace std;
int main()
{
myqueue q;
for(char ch='A';ch<='Z';ch++)
q.enQueue(ch);
//q.resetQueue();
while(!q.enQueueEmpty())
printf("%c ",q.deQueue());
q.~myqueue();
return 0;
}
class Stack T 模板实现代码如下:
#include<stdio.h>
#include<stdlib.h>
template<typename T>
class myqueue //这里需要把struct定义放在类的定义中
{
public:
myqueue();
~myqueue();
bool enQueueEmpty();
void enQueue(T ch);
T deQueue();
void resetQueue();
protected:
struct Node
{
T data;
Node* next;
};
struct Queue
{
Node*front;
Node*rear;
};
private:
Queue*q;
};
//这里需要再头文件中放置全部的模板声明和定义,若放在cpp里编译不通过
template<typename T> //每个函数前都要写,注意格式,其他跟上面的 class 一样
myqueue<T>::myqueue()
{
q->front=q->rear=(Node*)malloc(sizeof(Node));
q->front->next=NULL;
}
template<typename T>
myqueue<T>::~myqueue()
{
resetQueue();
free(q->front);
}
template<typename T>
bool myqueue<T>::enQueueEmpty()
{
return q->front==q->rear;
}
template<typename T>
void myqueue<T>::enQueue(T ch)
{
Node*cur = (Node*)malloc(sizeof(Node));
cur->data=ch;
cur->next=NULL; //插尾巴上,类似于尾插法
q->rear->next=cur;
q->rear=cur;
}
template<typename T>
T myqueue<T>::deQueue()
{
T ch=q->front->next->data;
if(q->front->next==q->rear) //若为空队列
{
q->rear=q->front;
free(q->front->next);
q->front->next=NULL;
}
else
{
Node* cur=q->front->next;
q->front->next=cur->next;
free(cur);
}
return ch;
}
template<typename T>
void myqueue<T>::resetQueue()
{
Node*head=q->front->next;
q->front->next=NULL;
q->rear=q->front;
Node * t;
while(head)
{
t=head;
head=head->next;
free(t);
}
}
main函数
#include <iostream>
#include "myqueue.h"
using namespace std;
int main()
{
myqueue<int> q;
#if 0 //char
for(char ch='A';ch<='Z';ch++)
q.enQueue(ch);
#endif
for(int ch='A';ch<='Z';ch++)
q.enQueue(ch);
//q.resetQueue();
while(!q.enQueueEmpty())
printf("%d ",q.deQueue());
q.~myqueue();
return 0;
}