2019-05-08用线性表中的数组来实现 栈的 结构 遇到

2019-05-08  本文已影响0人  常人

用线性表中的数组来实现 栈的 结构 遇到了很大的困难:伪代码不能死记硬背 必须加以理解

下面是基本的框架:

#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;
 }

 /*伪代码 看着难受 感觉不符合语法规则 随意乱写  ?????????????*/

上一篇 下一篇

猜你喜欢

热点阅读