• c/c++ 链栈


    c/c++ 链栈

    链栈

    下面的代码实现了以下功能

    函数 功能描述
    push 压入
    pop 弹出
    show_list 打印
    clear 释放所有内存空间
    destroy 释放所有内存空间

    nodestack.h

    #ifndef __NODESTACK__
    #define __NODESTACK__
    
    #include <stdio.h>
    #include <malloc.h>
    #include <assert.h>
    #include <memory.h>
    #include <stdbool.h>
    
    typedef int ElemType;
    
    typedef struct Node{
      ElemType data;
      struct Node *next;
    }Node;
    
    typedef struct nodestack{
      int size;
      Node *base;
      Node *top;
    }nodestack;
    
    void init(nodestack*);
    void push(nodestack*, ElemType);
    void show_list(nodestack*);
    void pop(nodestack*);
    int length(nodestack*);
    void clear(nodestack*);
    void destroy(nodestack*);
    #endif
    

    nodestack.c

    #include "nodestack.h"
    
    Node* createNode(ElemType val){
      Node* n = (Node*)malloc(sizeof(Node));
      n->data = val;
      n->next = NULL;
      return n;
    }
    void init(nodestack* stack){
      stack->size = 0;
      stack->top = NULL;
      stack->base = NULL;
    }
    void push(nodestack* stack, ElemType x){
      Node* n = createNode(x);
      //当栈为空的时候
      if(stack->base == NULL){
        stack->top = stack->base = n;
        n->next = NULL;
        stack->size++;
        return;
      }
      n->next = stack->top;
      stack->top = n;
      stack->size++;
    }
    void show_list(nodestack* stack){
      Node* top = stack->top;
      while(top != NULL){
        printf("%d
    ", top->data);
        top = top->next;
      }
    }
    void pop(nodestack* stack){
      if(stack->size == 0)return;
    
      Node* n = stack->top;
      stack->top = stack->top->next;
      free(n);
      stack->size--;
    }
    int length(nodestack* stack){
      return stack->size;
    }
    void clear(nodestack* stack){
      Node* top = stack->top;
      Node* tmp;
      while(top != NULL){
        tmp = top;
        top = top->next;
        free(tmp);
      }
      stack->top = stack->base = NULL;
      stack->size = 0;
    }
    void destroy(nodestack* stack){
      clear(stack);
    }
    

    nodestackmain.c

    #include "nodestack.h"
    
    int main(){
      nodestack list;
      init(&list);
      int select = 1;
      ElemType item;
      int index;
      while(select){
        printf("*****************************************
    ");
        printf("*** [1]   push        [2]  pop        ***
    ");
        printf("*** [3]   show_list   [4]  length     ***
    ");
        printf("*** [5]   clear       [6]  destroy    ***
    ");
        printf("*** [0]   quit                        ***
    ");
        printf("*****************************************
    ");
        printf("请选择:>");
        scanf("%d", &select);
        if(0 == select)
          break;
        switch(select){
        case 1:
          printf("请输入要插入的数据>
    ");
          scanf("%d",&item);
          push(&list, item);	
          show_list(&list);
          break;
        case 2:
          pop(&list);	
          show_list(&list);
          break;
        case 3:
          show_list(&list);
          break;
        case 4:
          printf("length is %d
    ", length(&list));
          show_list(&list);
          break;
        case 5:
          clear(&list);
          show_list(&list);
          break;
        case 6:
          destroy(&list);
          break;
        default:
          printf("输入的选择错误,请重新选择
    ");
          break;
        }
      }
      destroy(&list);
    }
    
  • 相关阅读:
    刘翔那点事
    网站建站模板
    搞笑!from 饮水思源
    我de虚拟经济学系列第一章 经济危机拼命建桥
    IT民工系列——c#操作Microsoft IE,实现自动登录吧!
    商业智能的发展及其应用
    我de虚拟经济学系列第三章 常见的致富之路
    IT民工系列——c#操作EditGrid,自己做一个在线Excel数据库吧!
    Asp.net下的Singleton模式
    asp.net 控件功能小结
  • 原文地址:https://www.cnblogs.com/xiaoshiwang/p/9243723.html
Copyright © 2020-2023  润新知