栈
顺序栈链栈
顺序栈
结构函数操作
#define maxlen 20;
typedef struct
{
datatype data[maxlen];
int top;
}SeqStack;
函数操作-初始化
//初始化1
SeqStack * CreateSeqStack()
{
SeqStack *sq;
sq = new SeqStack;
sq -> top =-1;
return sq;
}
//初始化2
void IniteSeqStack(SeqStack &s)// c++语法。&s表示函数中的s和传入的s是同一个是(类似于全局变量)
{
s.top = -1;
}
void main()
{
SeqStack s;
InitSeqStack(s);
}
函数操作-进栈
// 检查栈满否 进栈
int Push(SeqStack &s,datatype x) //c++语法 &s中 &是引用;函数中的s与主函数共用同一个s变量;这样可以直接修改主函数里s1的值
{
if(maxlen - 1 == top) return 0; //数组个数为n时,数组索引有【0,n-1】;
else
{
s.data[++(s.top)] = x;
return 1;
}
}
函数操作-出栈
int Pop(SeqStack &s,datatype &x)
{
if(s.top == -1) return 0;// 栈空无元素可弹出
else
{
x = s.data[top--];
return 1;
}
}
函数操作-取栈顶元素
int ReadTop(SeqStack s)
{
if(s.top == -1) retuern 0;
else
{
x = s.data[top];
return 1;
}
}
函数操作-判栈空,满
int SEmpty(SeqStack s)
{
if(s.top == -1) return 1;
else return 0;
}
int SFull(SeqStack s)
{
if(s.top == maxlen -1) return 1;
else return 0;
}
链栈
typedef struct stacknode
{
datatype data;
struct stacknode * next;
}StackNode;
typedef stacklink
{
StackNode * top;
}LinkStack;
函数操作-入栈
// 栈后进先出 ,只在栈顶 进出
void Push(LinkStack &s,datatype x)
{
StackNode *p = new StackNode;
p -> data = x;
p -> next = s.top;
s.top = p;
}
函数操作-出栈
//删除栈顶元素
int Pop(LinkStack &s,datatype &x)
{
if(s.top == NULL)
{
printf(“stack is empty”);
return 0;
}
else
{
StackNode *p = s.top;
x = p->data;
s.top = p ->next;
delete(p);
return 1;
}
}
函数操作-判栈空+显示
int SEmpty(LinkStack s)
{
if(NULL == s.top) return 1;
else return 0;
}
void ShowStack(LinkStack s)
{
if(NUll == s.top)
{
printf(“stack is empty”);
}
else
{
StackNode *p = s.top;
while(p)
{
court<<p->data;
p = p -> next;
}
}
}
c++栈的模板库调用
还不会