cpp
复制代码
#include<stdio.h>
#include<iostream>
#define SIZE 1000
using namespace std;
//用数组实现栈
class mystack_array {
public:
mystack_array(int _top = -1) :top(_top) {}
void push(int num) {
top++;
stack[top] = num;
}
int pop() {
if (top != -1) {
int tmp = stack[top];
top--;
return tmp;
}
return -1;
}
bool isEmpty() {
return top == -1;
}
private:
int stack[SIZE];
int top;
};
//用链表实现栈
class mystack_List {
private:
class Node {
public:
Node(int _val, Node* p) :val(_val), next(p) {}
Node* next;
int val;
};
Node* top;
int size;
public:
mystack_List(int _size = 0,Node*p=nullptr) :size(_size),top(p) {}
void push(int num) {//头插法
Node* node = (Node*)malloc(sizeof(Node));
node->val = num;
if (size == 0) {
top = node;
top->next = nullptr;
}
node->next = top->next;
top->next = node;
size++;
}
int pop() {
if (size == 0)
return -1;
Node* tmp = top->next;
int num = tmp->val;
top = top->next;
size--;
return num;
}
};
//用数组实现队列
class myqueue_array {
public:
myqueue_array() {
this->front = -1;
this->rear = -1;
}
bool isEmpty() {
return rear == front;
}
bool isFull() {
return rear == SIZE - 1;
}
int getfront() {
if (!isEmpty()) {
return arr[front + 1];
}
return -1;
}
void push(int num) {
rear++;
arr[rear] = num;
}
int pop() {
if (!isEmpty()) {
front++;
return arr[front];
}
return -1;
}
private:
int rear;
int front;
int arr[SIZE];
};
//用单链表实现队列
class myqueue_list {
private:
struct Node {
Node* next;
int val;
//Node() {}
Node(int num2) :val(num2) {}
};
Node* rear;
Node* front;
public:
myqueue_list() {
this->front = this->rear = nullptr;
}
bool isEmpty() {
if (front == nullptr)
return true;
return false;
}
void push(int num) {
Node* tmp = (Node*)malloc(sizeof(Node));
tmp->val = num;
if (isEmpty()) {
rear = front = tmp;
}
else {
tmp->next = nullptr;//尾插法
rear->next = tmp;
rear = tmp;
}
}
int pop() {
if (rear == nullptr)
return -1;
int num = front->val;
front = front->next;
return num;
}
};
int main() {
myqueue_list st;
int n = 10;
cout <<"进入顺序为:"<<endl;
for (int i = 1; i < n; ++i) {
st.push(i);
cout << i << " ";
}
cout << endl;
cout << endl;
cout << "*******************" << endl;
cout << endl;
cout << "出顺序为:" << endl;
for (int i = 1; i < n; ++i) {
cout << st.pop() << " ";
}
cout << endl;
return 0;
}