福建建设人才网站,如何创建网站的详细步骤,wordpress git wiki,网站建设设计作业文章目录 顺序栈的出栈 链栈的表示和实现链表的初始化判断链栈是否为空链栈的入栈链栈的出栈 递归定义函数的调用过程 顺序栈的出栈
#xff08;1#xff09;判断是否栈空#xff0c;若空则出错#xff08;下溢#xff09;。 #xff08;2#xff09;获取栈顶元素e。 1判断是否栈空若空则出错下溢。 2获取栈顶元素e。 3栈顶指针减1。
//顺序栈的出栈
int Pop(SqStack S, SElemType e) {//若栈不为空则删除栈顶元素用e返回其值并返回okif (S.top S.base) {return 0;}--S.top;e *S.top;return 1;
}链栈的表示和实现
链表的实现 链栈是运算受限的单链表只能在链表头部进行操作。
//链栈的表示
typedef struct StackNode {int data;struct StackNode* next;
}StackNode,*LinkStack;
LinkStack S; 链表的头指针就是栈顶。不需要头结点。基本不存在满栈的情况。空栈相当于头指针指向空。插入和删除仅在栈顶处执行。
链表的初始化
void InitStack(LinkStack S) {S NULL;
}判断链栈是否为空
//链栈是否为空
bool StackEmpty(LinkStack S) {if (S NULL) {return true;}else {return false;}
}链栈的入栈
//链栈上的入栈
void Push(LinkStack S, int e) {LinkStack p;p new StackNode;//生成新结点p-data e;//将新结点的数据域置为ep-next S;//将S结点赋值给p结点的next域S p;//修改栈顶指针}链栈的出栈
//链栈的出栈
int Pop(LinkStack S,int e) {LinkStack p;if (S NULL) {return 0;}e S-data;p S;S S-next;delete p;return 1;
}递归定义
若一个对象部分地包含他自己或用他自己给自己的定义就称这个对象是递归的。 若一个过程直接或间接地调用自己则这个调用过程 是递归的过程。 分治法求解递归问题算法的一般形式
void p(参数表{if(递归结束条件可直接求解步骤;-------基本项else p较小参数;---归纳项
}例求阶乘
long Factlong n{
ifn0{return 1} ;
else return n*Fact(n-1);
函数的调用过程
调用前系统完成 1将实参返回地址等传递给被调用函数 2为被调函数的局部变量分配存储区域 3将主调函数转移到被调函数 调用后系统完成 1保存被调函数的计算结果 2释放被调函数的数据区 3依照被调函数保存的返回地址转移到主调函数。 当多个函数嵌套调用时 遵循后调用先返回。需要用栈来实现。