话不多说,直接上代码
顺序栈
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
const int Maxsize = 100;
template <typename T>
struct Stack
{
T data[Maxsize];
int top;
};
template <typename T>
void InitStack(Stack<T> *&s) {//初始化栈
s = new Stack<T>;
s->top = -1;
}
template <typename T>
void DestroyStack(Stack<T>*& s) {//销毁栈
delete s;
}
template <typename T>
bool StackEmpty(Stack<T>*& s) {//判断栈是否为空
return (s->top == -1);
}
template <typename T>
void Push(Stack<T>*& s,T e) {//入栈
if (s->top == Maxsize - 1) cout << "栈已满,入栈失败" << endl;
else {
s->top++;
s->data[s->top] = e;
}
}
template <typename T>
void Pop(Stack<T>*& s) {//出栈
if (s->top == -1) cout << "栈已空,出栈失败" << endl;
else s->top--;
}
template <typename T>
T Top(Stack<T>*& s) {//取栈顶
if (s->top == -1) {
cout << "栈已空,取栈顶失败" << endl; return 0;
}
else return s->data[s->top];
}
int main() {
Stack<int>* s;
InitStack(s);
for (int i = 1; i <= 5; i++) {
Push(s, i);
}
while (!StackEmpty(s))
{
cout << Top(s) << " ";
Pop(s);
}
Stack<char>* c;
InitStack(c);
for (char i = 'a'; i <= 'e';i++) {
Push(c, i);
}
while (!StackEmpty(c))
{
cout << Top(c) << " ";
Pop(c);
}
return 0;
}
链栈
#include<iostream>
#include<stack>
using namespace std;
template<typename T>
struct Stack
{
T data;
Stack* next;
};
template<typename T>
void InitStack(Stack<T>*& s) //初始化空栈
{
s = NULL;//不设头结点
}
template<typename T>
void DestroyStack(Stack<T>*& s) {//销毁栈
Stack<T>* p = s;
while (p)
{
s = p->next;
delete p;
p = s;
}
delete p;
}
template<typename T>
bool StackEmpty(Stack<T>*& s) {//判断栈是否为空
return (s == NULL);
}
template<typename T>
void Push(Stack<T>*& s, T x) {//入栈
Stack<T>* p;
p = new Stack<T>;
p->data = x;
p->next = s;
s = p;
}
template<typename T>
void Pop(Stack<T>*& s) {//出栈
if (s == NULL) cout << "栈已空,出栈失败" << endl;
else {
Stack<T>* p = s;
s = s->next;
delete p;
}
}
template<typename T>
T Top(Stack<T>*& s) {//取栈顶
if (s) return s->data;
else cout<< "栈已空,取栈顶失败" << endl;
}
int main() {
Stack<int>* s;
InitStack(s);
for (int i = 1; i <= 5; i++) {
Push(s, i);
}
while (!StackEmpty(s))
{
cout << Top(s) << " ";
Pop(s);
}
Stack<char>* c;
InitStack(c);
for (char i = 'a'; i <= 'e'; i++) {
Push(c, i);
}
while (!StackEmpty(c))
{
cout << Top(c) << " ";
Pop(c);
}
return 0;
}
顺序队
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
const int Maxsize = 100;
template<typename T>
struct Queue
{
T data[Maxsize];
int front, rear;
};
template<typename T>
void InitQueue(Queue<T>*& q) {
q = new Queue<T>;
q->front = q->rear = -1;
}
template<typename T>
void DestroyStack(Queue<T>*& q) {//销毁栈
delete q;
}
template<typename T>
bool StackEmpty(Queue<T>*& q) {//判断栈是否为空
return (q->front == q->rear);
}
template<typename T>
void Push(Queue<T>*& q, T e) {//入队
if (q->rear == Maxsize - 1) cout << "队已满,入队失败" << endl;
else {
q->rear++;
q->data[q->rear] = e;
}
}
template<typename T>
bool Pop(Queue<T>*& q,T &e) {//出队
if (q->rear == q->front) return 0;
else {
q->front++;
e = q->data[q->front];
return 1;
}
}
int main() {
Queue<int>* q; int e;
InitQueue(q);
for (int i = 1; i <= 5; i++) {
Push(q, i);
}
while(Pop(q,e)){
cout << e << " ";
}
return 0;
}
链队
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
template<typename T>
struct qnode
{
T data;
qnode* next;
};
template<typename T>
struct Queue
{
qnode<T>* front, * rear;//队头指针 队尾指针
};
template<typename T>
void InitQueue(Queue<T>*& q) {//初始化队
q = new Queue<T>;
q->front = q->rear = NULL;
}
template<typename T>
void DestroyStack(Queue<T>*& q) {//销毁队
qnode<T>* p = q->front, * r;
if (p) {
r = p->next;
while (r) {
delete p;
p = r;
r = p->next;
}
}
delete p;
delete q;
}
template<typename T>
bool StackEmpty(Queue<T>*& q) {//判断队是否为空
return (q->rear == NULL);
}
template<typename T>
void Push(Queue<T>*& q, T e) {//入队
qnode<T>* p = new qnode<T>;
p->data = e;
p->next = NULL;
if (q->rear == NULL) q->front = q->rear = p;
else {
q->rear->next = p;
q->rear = p;
}
}
template<typename T>
bool Pop(Queue<T>*& q,T &e) {//出队
if (q->rear == NULL) return 0;
else {
e = q->front->data;
if (q->front == q->rear) q->front = q->rear = NULL;
else q->front = q->front->next;
return 1;
}
}
int main() {
Queue<int>* q; int e;
InitQueue(q);
for (int i = 1; i <= 5; i++) {
Push(q, i);
}
while (Pop(q,e))
{
cout << e << " ";
}
return 0;
}