zoukankan      html  css  js  c++  java
  • c语言实现顺序栈

    顺序栈

    采用顺存储的栈成为顺序栈,它利用一组地址连续的存储单元存放栈的元素,同时需要一个指针指向栈顶元素的位置。

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    //定义一个顺序栈
    typedef struct {
        int data[10];
        int top;//用于指向栈顶元素
    }sqStack;
    
    //初始化一个空栈
    void InitStack(sqStack &S){//需要改变栈内部的值,所以用引用类型
        S.top=-1;//空栈的数组0下标也无元素,所以初始值为-1
    }
    
    //判断空栈
    bool EmptyStack(sqStack S){ //直接用传递过来的值,所以不用引用类型
        if (S.top==-1){
            printf("此栈为空栈
    ");
            return true;
        }
        return false;
    }
    
    //入栈
    bool PushStack(sqStack &S,int value){
        //需要判断栈是否满
        if (S.top==9){
            return false;
        }
        S.data[++S.top]=value;//栈顶指针加1,并将value传进去
        return true;
    }
    
    //遍历栈中的值
    void GetStack(sqStack S){
        for (int i = 0; i <= S.top; ++i) {
            printf("%d	%d
    ",i,S.data[i]);
        }
    }
    
    //出栈
    bool PopStack(sqStack S){
        //判断是否是空栈
        if (S.top==-1){
            return false;
        }
        S.top--;
        return true;
    }
    
    
    int main(){
        sqStack s;
        InitStack(s);
        EmptyStack(s);
        PushStack(s,10);
        GetStack(s);
        return 0;
    }
    

    链栈

    采用链式存储的栈成为链栈,相比于顺序栈,链栈的优点是便于多个栈共享存储空间和提高效率,且不存在栈满上溢的情况,通常采用单链表实现,然后限定所有的操作都是在表头进行。

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    //链栈
    typedef struct node{
        int data;//数据域,不需要设置空间大小
        struct node *nextnode;
    }*LkStack;
    
    //初始化栈
    LkStack InitStack(LkStack &S){
        S = (LkStack)malloc(sizeof(10));
        return S;
    }
    
    //入栈
    LkStack PushStack(LkStack &S,int data){
        //定义一个LkStack的临时结点,然后将栈顶的值赋值给它
        LkStack tmp;
        tmp = S;
        //更新栈顶结点的数据
        S->data=data;
        S->nextnode=tmp;
        //释放临时结点
        free(tmp);
        return S;
    }
    
    int main(){
        LkStack stack;
        InitStack(stack);
        PushStack(stack,2);
        printf("%d",stack->data);
        return 0;
    }
    
  • 相关阅读:
    走进AngularJs(二) ng模板中常用指令的使用方式
    mysql知识汇总
    存储动态数据时,数据库的设计方法
    js判断密码强度
    svg―Raphael.js Library(一)
    常用js代码
    IE6实现图片或背景的圆角效果
    巧用css border
    IE6下的效果
    理解盒模型
  • 原文地址:https://www.cnblogs.com/szj666/p/13095540.html
Copyright © 2011-2022 走看看