栈
栈
:只允许在一端进行插入或删除操作的线性表。通过只操作top
从而实现先进后出
的特点。
结构体
#define MaxSize 50 //定义栈中元素的最大个数
typedef struct{
Elemtype data[MaxSize]; //存放栈中元素
int top; //栈顶指针
}SqStack;
源码实现
#include <iostream>
#define MaxSize 50 //定义栈中元素的最大个数
using namespace std;
class MyStack
{
private:
int data[MaxSize];
public:
int top;
MyStack(){
top = -1;
};
~MyStack(){};
bool IsEmpty(){
if(top == -1)
return true;
else
return false;
}
bool Mpush (int x){
if(top == MaxSize-1)
return false;
data[++top] = x;
return true;
}
bool Mpop(){
if(top == -1)
return false;
top--; //靠覆盖实现数据的删除
return true;
}
bool GetTop(int &x){
if(top == -1)
return false;
x = data[top];
return true;
}
};
int main()
{
MyStack mStack; //构造函数会在实例化的时候自动调用
for(int i=1; i<6; i++)
mStack.Mpush(i);
mStack.Mpop();
int mtop;
mStack.GetTop(mtop);
cout<<mtop<<endl;
cout<<mStack.top<<endl;
}
队列
队列
:只允许在表的一端进行插入,而在表的另一端进行删除操作的线性表。通过操作front
与rear
两个元素,从而实现先进先出
的特点。
结构体
#define MaxSize 50 //定义队列中元素的最大个数
typedef struct{
Elemtype data[MaxSize]; //存放队列元素
int front,rear; //队头指针和队尾指针
}SqQueue;
源码实现
#include <iostream>
using namespace std;
#define MaxSize 50 //定义栈中元素的最大个数
class MyQueue
{
private:
int data[MaxSize];
public:
int front;
int rear;
MyQueue(){
front=rear=0;
};
~MyQueue(){};
bool IsEmpty(){
if(front == rear)
return true;
else
return false;
}
bool IsFull(){
//防止队空与队满均出现rear == front所以rear指向下一个位置
if((rear+1)%MaxSize == front)
return true;
else
return false;
}
bool EnQueue (int x){
if(!IsFull())
{
data[rear] = x;
rear = (rear+1)%MaxSize; //操作队尾
return true;
}else
return false;
}
bool Dequeue(int &x){
if(IsEmpty())
return false;
else{
x = data[front];
front = (front+1)%MaxSize; //操作队头
return true;
}
}
};
int main()
{
MyQueue myQueue;
for(int i=0;i<5;i++)
myQueue.EnQueue(i);
int x,i=0;
while(i++<3)
myQueue.Dequeue(x);
cout<<x<<endl;
}