栈的特性:先进后出,后进先出
最先放入栈的内容最后被拿出来,最后放进栈的内容最先被拿出来
栈顶永远指向空
栈的插入
push() :在栈顶插入一个元素
栈的删除
pop() :在栈顶移除一个元素
构造一个空栈
那么栈的案例就是下面了
对于栈,后进先出,先进后出。
#include<iostream>
using namespace std;
class Point { //节点类
int data;
public:
int getdata();
bool setdata(int data);
};
int Point::getdata() {
return this->data;
}
bool Point::setdata(int data) {
this->data = data;
return 1;
}
class Stack {
Point *top;
Point base[100];
int size;
public:
Stack(); //构造函数
int intop(); //栈顶元素
bool push(int data); //成功后和不成功两种可能,bool类型
bool pop(); //删除元素
bool temp();
int length();
};
Stack::Stack(){ //默认构造
top = base;
size = 0;
}
int Stack::intop() { //顶部元素
if (size == 0)
return 0;
return (top - 1)->getdata();
}
bool Stack::push(int data) {
if (size == 100)
return 0;
top->setdata(data);
top++;
size++;
return 1;
}
bool Stack::pop() {
if (top == base)
return 0;
top--;
size--;
return 1;
}
bool Stack::temp() {
if (top == base)
return 0;
return 1;
}
int Stack::length() {
return size;
}
int main() {
Stack s = Stack();
s.push(1);
cout << s.intop() << endl;
s.push(2);
cout << s.intop() << endl;
s.push(3);
cout << s.intop() << endl;
s.push(4);
cout << s.intop() << endl;
for (int i = 0; i < 4; i++) {
cout << s.intop() << endl;
s.pop();
}
cout << endl;
return 0;
}
队列
对列的数据成员包括:队列元素、队头指针、队尾指针
当队列为空的时候存储数据队空间有一定浪费,所以同常采用循环队列形式
为了使队尾达到数组最后一个元素时,再回头到数组开头,需要运用取余运算(%)
奉行的则是先进先出,后进后出;
#include<iostream>
using namespace std;
class Point { //队列先进先出
int data;
public:
int getdata();
void setdata(int data);
};
int Point::getdata() {
return this->data;
}
void Point::setdata(int data) {
this->data = data;
}
class Queue {
int head;
int tail;
int size;
Point q[100];
public:
Queue(); //构造函数
bool push(int data);
bool pop();
int front();
int back();
bool temp();
int length();
};
Queue::Queue() {
head = 0;
tail = 0;
size = 0;
}
bool Queue::push(int data) {
if (size == 100)
return 0;
q[tail].setdata(data);
tail = (tail + 1) % 100;
size++;
}
bool Queue::pop() {
if (size == 0)
return 0;
head = (head + 1) % 100;
size--;
}
int Queue::front() {
return q[head].getdata();
}
int Queue::back() {
return q[tail - 1].getdata();
}
bool Queue::temp() {
if (size == 0)
return 0;
return 1;
}
int Queue::length() {
return size;
}
int main() {
Queue q = Queue();
q.push(1);
cout<< q.back() << endl;
q.push(2);
cout << q.back() << endl;
q.push(3);
cout << q.back() << endl;
q.push(4);
cout << q.back() << endl;
for (int i = 0; i < 4; i++) {
cout << q.front() << " ";
q.pop();
}
return 0;
}