栈一般出选择题,队列选择题和大题都有
栈:只允许在一端 进行插入或删除操作的线性表即栈顶(top)
s.top=-1时栈为空
向栈中插入元素
s.top=s.top+1;s.data[s.top]=value; 这段代码可以用一行代码代替: s.data[++s.top]=value;
不懂i++和++i的有福了
++ i 是先加后赋值;i ++ 是先赋值后加;++i和i++都是分两步完成的
例题:当i=5时,s=(++i)+(++i)和s=(i++)+(i++)的值:
1、当i=5时,s=(++i)+(++i)=13 先算第一个(++i),++在前面,就把i先加1再把赋值,即先把i变为6然后再得出(++i)的值为6,这时i已经变为6了,
再计算第二个(++i),++在前面也是先把i加1后再赋值,不过这时的i已经为6了,第一步的时候把i变成6了的,然后加1的话就变成7了,所以第二个(++i)的值为7,s=(++i)+(++i)=6+7=13。
2、s=(i++)+(i++)=11 先算第一个(i++),i在前面,就先赋值再把i加1,即(i++)的值为5,i的值变为6,第二个(i++),i在前面,先赋值再把i加1,这个时候的i已经为6了,即(i++)的值为6,而i已经变为7了。所以s=(i++)+(i++)=5+6=11。
顺序存储实现栈
typedef struct {
Elemtype data[50];
int top;
}SqStack;

而出栈 则是
S.data[top]=x;
s.top=s.top-1;
同样这两行代码等价于 S.data[S.top--]; 即元素先出栈在移动

出栈,入栈, 获取栈顶元素代码如下
#include<iostream>
# define Maxsize 50
typedef int Elemtype;
using namespace std;
typedef struct {
Elemtype data[Maxsize];
int top;//始终指向栈顶
}Sqstack;
void init(Sqstack &S)
{
S.top=-1;//初始化栈
}
bool StackEmpty(Sqstack S)
{
if(S.top==-1)
{
return true;
}
else
{
return false;
}
}
bool Push(Sqstack &S,Elemtype data)
{
//判断栈是否满
if(S.top==Maxsize-1)
{
cout<<"stack if overflow"<<" "<<endl;
}
else
{
S.data[++S.top]=data;
return true;
}
}
bool Gettop(Sqstack S,Elemtype &m)
{
if(StackEmpty(S))
{
return false;
}
m=S.data[S.top];
return true;
}
//出栈
bool Pop(Sqstack &S,Elemtype &n)
{
if(StackEmpty(S))
{
return false;
}
else
{
n=S.data[S.top--];//出栈
return true;
}
}
void print(Sqstack S)
{
int i=0;
for(i=0;i<=S.top;i++)
{
cout<<S.data[i]<<" ";
}
cout<<endl;
}
int main()
{
Sqstack S;
init(S);
Elemtype m,n;
bool flag,ret,ret2;
Push(S,1);//栈底
Push(S,3);
Push(S,6);
Push(S,10);//栈顶
print(S);
flag=StackEmpty(S);
if(flag)
{
cout<<"stack is empty"<<endl;
}
ret=Gettop(S,m);
if(ret)
{
cout<<"stack top is "<<m<<endl;
}
ret2=Pop(S,n);
if(ret2)
{
cout<<"remove stack top is " << n<<" "<<endl;
}
ret=Gettop(S,m);
if(ret)
{
cout<<"the new stack top is "<<m<<endl;
}
return 0;
}