zoukankan      html  css  js  c++  java
  • 链栈的基本接口实现

    基本接口实现代码,欢迎补充

    #include <conio.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #define TRUE   1
    #define FALSE  0
    #define OK     1
    #define ERROR  0
    #define IBFEASIBLE  -1
    #define OVERFLOW    -2 
    
    typedef int Status;
    typedef int ElemType; /* 元素类型为int类型*/
    
    //链栈类型 
    typedef struct LSNode{ 
        ElemType data;        //数据域 
        struct LSNode *next;    //指针域 
    }LSNode, *LStack;         //结点和链栈类型 
    
    Status InitStack_LS(LStack &S);
    void DestroyStack_LS(LStack &S);
    Status StackEmpty_LS(LStack S);
    Status Push_LS(LStack &S,ElemType e);
    Status Pop_LS(LStack &S,ElemType &e);
    Status GetTop_LS(LStack S, ElemType &e);
    Status Traverse(LStack S);
    int LengthLStack(LStack S); 
    
    //链栈的基本操作实现代码如下:
    
    //1.初始化链栈 
    Status InitStack_LS(LStack &S){
        S=(LSNode*)malloc(sizeof(LSNode));
        if(S==NULL)return OVERFLOW;
        S->next = NULL;
        return OK;
    }
    
    //2.销毁链栈
    void DestroyStack_LS(LStack &S){
        LStack p=S->next,q=S;
          while(p){
            free(q);
              q=p;
              p=p->next;
        }
      free(p);
    }
    
    //3.判空操作
    Status StackEmpty_LS(LStack S){ 
        if(S->next==NULL){
            return TRUE;
        }else{
            return FALSE;
        }
    } 
    
    //4.入栈
    Status Push_LS(LStack &S,ElemType e){
        LSNode *t;
          t=(LSNode*)malloc(sizeof(LSNode));//为元素e分配空间
          if(t==NULL) return FALSE;
          t->data=e;
          t->next=S;
          S=t;
          return OK;
    } 
    
    //5.出栈
    Status Pop_LS(LStack &S,ElemType &e){
        LSNode *t;
          if(S==NULL) return ERROR;
          t=S;        //t指向栈顶元素的节点
          e=S->data;            
          S=S->next;        //删除栈顶结点
          free(t);        //释放节点t
          return OK;
    } 
    
    //6.取出栈顶元素
    Status GetTop_LS(LStack S,ElemType &e){
        if(S==NULL) return ERROR;
          e=S->data;
          return OK;
    } 
    
    //7.链栈的长度
    int LengthLStack(LStack S){
        int length;
        while(S->next){
            S=S->next;
            length++;
        } 
        return length;
    } 
    
    //8.遍历栈
    Status Traverse(LStack S)
    {
        LSNode *p;
        p = S;
        while (p->next){
            printf("%4d", p->data);
            p=p->next;
        }
        printf("
    ");
        return OK;
    }
    
    int main(){
        int i,e,j,m;
        LStack S;
        do{
            printf("1.初始化链栈
    ");
            printf("2.销毁链栈
    ");
            printf("3.判断链栈是否为空
    ");
            printf("4.将元素压入栈
    ");
            printf("5.栈顶元素出栈
    ");
            printf("6.取栈顶元素,并返回
    ");
            printf("7.链栈的长度
    ");
            printf("8.遍历链栈元素
    ");
            printf("请输入你要进行的操作:
    ");
            scanf("%d",&i);
            switch(i){
                case 1 :
                        if(InitStack_LS(S)){
                            printf("初始化成功
    ");
                            printf("请输入5个元素进栈:
    ");
                            for(j=0;j<5;j++){
                                scanf("%d",&e);
                                Push_LS(S,e);
                            }
                        }else{
                            printf("初始化失败
    "); 
                        }
                        break;
                case 2 :
                        DestroyStack_LS(S);
                        printf("销毁栈成功
    "); 
                        break;
                case 3 :
                        if(StackEmpty_LS(S)){
                            printf("链栈为空!
    "); 
                        }else{
                            printf("链栈不为空!
    "); 
                        }
                        break;
                case 4 :
                        printf("请输入压入栈元素的值:
    ");
                        scanf("%d",&e);
                        if(Push_LS(S,e)){
                            printf("成功压入
    "); 
                        }else{
                            printf("压入失败
    "); 
                        }
                        break; 
                case 5 :
                        Pop_LS(S, m);
                        printf("成功出栈,数值为:%d
    ",m);
                        break;
                case 6 :
                        GetTop_LS(S,m);
                        printf("取出栈顶元素的值:%d
    ",m); 
                        break;
                case 7 :
                        printf("链栈的长度为:%d
    ",LengthLStack(S));
                        break;
                case 8 :
                        printf("链表中元素:"); 
                        Traverse(S);
                        break;
            }
        }while(i>0&&i<=8);
        return 0;
    }
      觉得有用将点赞哦!
     
  • 相关阅读:
    VS2013快速安装教程
    软件工程课程的感想
    GitHub和Microsoft TFS对比有什么优势
    拼接素数
    C语言程序题
    vue中的实例方法的底层原理
    ios 安卓
    防抖
    伪数组转真数组的放法
    http和https的一种能力?
  • 原文地址:https://www.cnblogs.com/linwx/p/7899923.html
Copyright © 2011-2022 走看看