qq1242009750 发表于 2017-12-19 16:41:16

带链栈

本帖最后由 qq1242009750 于 2017-12-19 16:48 编辑

首先我们来定义一些结构和宏:
①带链栈节点:
        struct StackLink
        {
                SNode *top;
                SNode *base;
                int Count;
                int StackSize;
        };

②带链栈结构:
        struct SNode
        {
                int data;
                SNode *Next;
        };

③以及我们的一些宏:
#define INIT_STACK_SIZE 100        //初始化容量
#define INCREMENT 100                //增容

操作:
①初始化: 把栈顶和栈底赋为NULL,计数器置零。

②入栈:
1)当栈为空时(计数器 == 0||base = top = NULL),先创建一个节点,此节点的Next指向top(此节点的Next=NULL),然后把top和base指向此节点,计数器加1。
2)当栈不为空且不满时(Count < StackSize && base != top != NULL),先创建一个节点,此节点的Next指向top,然后把top指向此节点,计数器加1。
3)当栈满时先增容,后创建一个节点,此节点的Next指向top,然后把top指向此节点,计数器加1。

③出栈:
1)当栈不为空时(Count != 0 && base != top != NULL),创建一个临时指针变量,保存top->Next的地址,取出内容后删除top,再把top指针指向临时指针。
2)当栈为空时(base == top == NULL),显示报错信息并反回。
页: [1]
查看完整版本: 带链栈