栈的定义:
栈(stack)是限定仅在表尾进行插入和删除操作的线性表。注意他的特点(先进后出);
具体地理解:栈首先是个线性表,栈元素之间含有线性关系,前驱后继的关系。
---------------------------------------------------------------------------------------------------------------------------
这两天有点害怕数据结构了,可以听懂,但是让我编写我却编不出来。这是最操蛋的。
一定要知行和一。加油。我可以的。
-----------------------------------------------------------------------------------------------------------------------------
数据结构对栈的定义:
typedef int SElemType; 这句话常用 相当于给int起了个别名叫做SElemType。
typedef struct{
SElemType data[MAXSIZE];
int top; //用于栈顶指针
}SqStrack;
操作:进栈操作,插入元素
Status Push (SqStrack *S,SElemType e){
if(S->top==MAXSIZE-1){
return -1;//mistake
}
S->top++; //栈顶指针增加1
S->data[S->top]=e;//将新插入元素赋值给栈顶空间
return OK;
}
操作:出栈操作
//若栈不空,删除S的栈顶元素,用e返回其值,并返回ok,否则返回-1;
Status Pop (SqStrack *S,SElemType * e){
if(S->top==-1){
return -1;//mistake
}
*e=S->data[S->top]; 将要删除的栈顶元素赋值给e
S->top--; //栈顶指针增加1
return OK;
}
-----------------------------------------------------------------------------------------------------------
详细代码C++
#include<iostream>
#define SIZE 10
#define ERROR -1
using namespace std;
//栈的结构体定义
struct SqStack{
int *top;//栈顶指针
int *low;//栈底指针
int size;//栈的当前容量大小
};
//初始化栈
void Init(SqStack &s){
s.low=new int [SIZE];
if(!s.low) exit ERROR;
s.top=s.low;//这里使得栈顶指针和栈底指针指向同一个地址
s.size=SIZE;//定义栈的容量为100
}
//栈的操作,压入
int Push(SqStack &s,int e) {
if(s.top-s.low>s.size)//栈满 ,我们报错
{
cout <<"栈满"<<endl;
return ERROR;
}
*s.top=e;
s.top++;//栈顶指针加1
return 1;
}
//栈的操作取出栈顶元素,并删除栈顶
int Pop(SqStack &s,int &e)
{
if(s.top==s.low)
return 0;
s.top--;//top先减去1,然后再去取元素
e=*s.top;
return 1;
}
//判空
int IsEmpty(SqStack s)
{
if(s.top==s.low)
return 1;
else
return 0;
}
void Destroy(SqStack &s) //销毁栈
{
delete s.low;
}
int main(){
SqStack slist;
Init(slist);
cout<<"请输入一串数字:"<<endl;
int e;
while(cin>>e){
Push(slist,e);
cout<<e<<" ";
}
while(!IsEmpty(slist))
{
Pop(slist,e);
cout<<e<<" ";
}
Destroy(slist);
return 0;
}
网友评论