• C语言数据结构-栈


    一、栈的定义

    栈(statck)这种数据结构在计算机中是相当出名的。栈中的数据是先进后出的(First In Last Out, FILO)。栈只有一个出口,允许新增元素(只能在栈顶上增加)、

    移出元素(只能移出栈顶元素)、取得栈顶元素等操作。在STL中,栈是以别的容器作为底部结构,再将接口改变,使之符合栈的特性就可以了。

    二、代码实现

      1 //  main.c
      2 //  C 语言-栈
      3 //
      4 //  Created by rimi on 2017/5/22.
      5 //  Copyright © 2017年 rimi. All rights reserved.
      6 //
      7 
      8 #include <stdio.h>
      9 #include<stdlib.h>
     10 #include<stdbool.h>
     11 struct Data{//因为两个相邻之间的关系需要维护
     12     int i;
     13     struct Data * next;
     14 
     15 };
     16 
     17 
     18 struct Stack{
     19     struct Data *pTop;//栈顶指针
     20     struct Data *pBottom;//栈底指针
     21     int maxNumber;//栈里面最多放几个元素
     22     int currentNumber;//栈当前元素个数
     23 
     24 };
     25 struct Data * newData();//初始化一个Date
     26 struct Stack * initStack();//初始化一个栈
     27 bool push(struct Stack * stack,struct Data *data);//压栈、进栈
     28 void pop(struct Stack * stack);//出栈
     29 void traverse(struct Stack * stack);//遍历栈里面的所有元素
     30 bool isEmpty(struct Stack * stack);
     31 bool isFull(struct Stack * stack);
     32 
     33 int main(int argc, const char * argv[]) {
     34     struct Stack * stack=initStack(5);
     35     while (push(stack,newData() )){
     36     }
     37     traverse(stack);
     38     pop(stack);
     39     pop(stack);
     40     pop(stack);
     41      traverse(stack);
     42     return 0;
     43 }
     44 //初始化一个data
     45 struct Data * newData(){
     46     struct Data * data=(struct Data *)malloc (sizeof(struct Data));
     47     data->next=NULL;
     48     printf("请输入一个元素值(一个整数):");
     49     scanf("%d",&data->i);
     50     return data;
     51 
     52 }
     53 //初始化一个栈
     54 struct Stack * initStack(int max){
     55     struct Stack * stack=(struct Stack *)malloc (sizeof(struct Stack));
     56     stack->pTop=NULL;
     57     stack->pBottom=NULL;
     58     stack->maxNumber=max;
     59     stack->currentNumber=0;
     60     return stack;
     61 
     62 }
     63 //判断是否为满(为满返回true,不为满false)
     64 bool isFull(struct Stack * stack){
     65     if(stack ->currentNumber ==stack->maxNumber) {
     66         
     67         return true;
     68   
     69 }
     70     return false;
     71 }
     72 
     73 
     74 //压栈、进栈
     75 bool   push (struct Stack * stack,struct Data *data){
     76     if(isFull(stack)){
     77         printf("栈已满了");
     78         return false;
     79         
     80     }
     81     if(data ->i==-1){
     82         return false;
     83     }
     84     if(stack->pTop== NULL && stack ->pBottom ==NULL){
     85         
     86         stack ->pTop=data;
     87         stack->pBottom=data;
     88     }else{
     89         data->next=stack->pTop;
     90         stack->pTop=data;
     91     }
     92     stack->currentNumber++;
     93     return true;
     94 }
     95 //判断是否为空
     96 bool isEmpty(struct Stack * stack){
     97     if(stack ->pBottom == NULL && stack ->pTop ==NULL) {
     98         return true;
     99     }
    100     return  false;
    101 }
    102 
    103 
    104 
    105 //弹出栈顶元素
    106 void pop (struct Stack * stack){
    107     if(!isEmpty(stack)) {
    108         struct Data *data=(stack )->pTop;
    109         printf("元素:%d 出栈 
    ",data->i);
    110         stack->pTop = stack ->pTop->next;
    111         free(data);
    112         
    113     }
    114     
    115 }
    116 //遍历打印栈中的元素
    117 void traverse (struct Stack *stack){
    118     printf("=================== 
    ");
    119     int index=0;
    120     struct Data * temp =stack ->pTop;
    121     while(temp !=NULL){
    122         printf("第%d个输出的元素是:%d 
    ",++index,temp->i);
    123         temp = temp->next;
    124     }
    125      printf("=================== 
    ");
    126 }
  • 相关阅读:
    BUUCTF [XMAN2018排位赛]四道misc题汇总
    祥云杯2020 Misc题解
    win10更换pip源
    BUUCTF N1BOOK配套题目
    kali下docker安装教程
    湖湘杯2020 Misc题解
    7号夺宝1元购iPhone6s 1元众筹怎么玩
    html5 的服务器推送 Server-sent Events和 websocket这两个是不是同一个东西,是两个不同的?
    WebSocket 是什么原理?为什么可以实现持久连接?
    使用HTML5的十大原因
  • 原文地址:https://www.cnblogs.com/sbj-dawn/p/6906192.html
Copyright © 2020-2023  润新知