用线性表中的数组来实现 栈的 结构 遇到了很大的困难:伪代码不能死记硬背 必须加以理解
下面是基本的框架:
#include<stdio.h>//程序中用到标准库函数 (如输入输出语句)
#include <stdbool.h>//false ture直接调用的标准库
#define LENGTH 20//# 预处理的信息 在编译之前就需要处理的信息
#define STACKINCERMENT 20
/*
实在写不出 先把需要的骨架的逻辑写出来 再 网上搜索 纠结是没有用的
分别用线性表中的数组 链表 实现一个栈的结构
1、获取元素
2、删除
3、更新
4、插入
5、清空
6、遍历
7、栈的元素个数
*/
typedef struct {
// int *arr;
int length;
int *top;
int *base;
}Stack;
//初始化栈 分配空间
InitStack(Stack &S){
S.base = (int *)malloc(LENGTH * sizeof(int));
if (!S.arr){
exit("OVERFLOW");
}
S.top = S.base;
S.length = LENGTH;
return true;
}
/*
GetTop(Stack S,int n){
if (!S.top){
n = S.top;
}
}
*/
//获取栈顶的元素
GetTop(Stack S,int &S){
if (S.top == S.base){
return false;
}
e = (int *)malloc(sizeof(int));
e = S.top;
}
//栈中插入元素
Push(Stack &S,int e){
/*
插入元素 数组实现的话 插在最尾端
size +1 ;(在Stack中 使用的是size)
top = top+1;
*/
//需要判断 栈 是不是满了(合法性)
if ((S.top - S.base) == S.size) {
S.base = (int *)ralloc(S.base, (S.stacksize + STACKINCERMENT)*sizeof(int);
if (!S.base) return false;//分配空间失败
//top指针的位置 是由 stackszie(栈保存了多少个元素) 进行描述的
S.top = S.base + S.stacksize;
S.stacksize += STACKINCERMENT;
}
*S.top++ = e; // top既然是指针 为什么这么直接表示 指针不需要移动的吗????
return true;
}
//删除元素
Pop(Stack &S, int & e){
//合法性检查 检查栈 是不是为空
if (S.top == S.base){
return false;
}
e = *S.top;
*S.top--;
return true;
}
/*伪代码 看着难受 感觉不符合语法规则 随意乱写 ?????????????*/
网友评论