zoukankan      html  css  js  c++  java
  • C++学习(三十二)(C语言部分)之 栈

    栈测试代码笔记如下:

     1 #include<stdio.h>
     2 #include<string.h>
     3 #include <stdlib.h>
     4 #define  SIZE 10
     5 
     6 typedef struct Stack
     7 {
     8     char *name[SIZE];  //栈的容量
     9 
    10     int top;  //栈顶
    11 }STACK,*PSTACK;    //  struct Stack *
    12 
    13 //1.初始化栈
    14 void Init_Stack(PSTACK S)  //这里只需要一个参数  把栈传进来初始化
    15 {
    16     S->top = 0;  //栈顶是从第0个下标开始 
    17 
    18     for (int i = 0; i < SIZE; i++)
    19     {
    20         S->name[i] = NULL;  
    21     }
    22 }
    23 
    24 //2.入栈操作
    25 void Push_Stack(PSTACK S, char *data)  //参数1:表明插入的栈     参数2: 要插入的数据
    26 {
    27     //2.1 判断栈是否是满的  如果是满的就退出   满了你还要插入 会报错
    28     if (S->top >= SIZE)
    29     {
    30         printf("栈满!无法继续插入
    ");
    31         return;  //结束这个函数.
    32     }
    33 
    34     //2.2 栈没有满
    35     //S->name[S->top] = data; // 这样写有一个bug    data是一个堆内存    这是浅拷贝问题  会造成内存泄漏. C++讲到
    36     int len = strlen(data);     //我随便申请一个内存不可以吗?   后果:会浪费 或者不够用   1W  现在只需要暂用10个内存大小
    37     S->name[S->top] = (char *)malloc(sizeof(char)*len + 1); //name它是一个指针数组  申请多大要按照你传进来的参数定制
    38     //+1 是防止斜杠0
    39     strcpy(S->name[S->top], data); //字符串拷贝函数
    40     S->top++;   //在执行插入操作之后 我的top要+1
    41 }
    42 
    43 //3.获取栈顶元素
    44 char * GetStackTop(PSTACK S)
    45 {
    46     return S->name[S->top-1];
    47 }
    48 
    49 //4. 出栈
    50 void Pop_Stack(PSTACK S)
    51 {
    52     //这里我就不判断   判断是不是空
    53 
    54     free(S->name[S->top-1]);
    55 
    56     S->top--;
    57 }
    58 
    59 //5.判断是不是空的栈
    60 int Stack_Empty(PSTACK S)  //函数返回1 说明什么栈是空的  如果返回0说明栈是有元素的
    61 {
    62     return S->top == 0;   //等于0说明栈是空的
    63 }
    64 
    65 int main()
    66 {
    67     STACK MyStack;   //定义一个栈
    68         Init_Stack(&MyStack);   //调用初始化函数给栈初始化
    69         //入栈
    70         Push_Stack(&MyStack, "张三");
    71         Push_Stack(&MyStack, "李四");
    72         Push_Stack(&MyStack, "");
    73         Push_Stack(&MyStack, "王麻子");
    74         Push_Stack(&MyStack, "Danny");
    75         Push_Stack(&MyStack, "小小");
    76                     // 出栈
    77         while (!Stack_Empty(&MyStack)) //如果栈不是空的 就一直循环
    78         {
    79             printf(" %s	", GetStackTop(&MyStack));  //打印栈顶元素   如果都不出栈  栈顶是不是永远都是广广
    80             //在这里要进行出栈操作
    81             Pop_Stack(&MyStack);  //都出栈完之后  栈为空 结束循环
    82         }
    83         printf("
    ");
    84     return 0;
    85 }

    2019-03-31  21:04:47 

  • 相关阅读:
    measure time program
    Visual Studio Code 好用的 source code editor
    tmux
    singleTask, singleInstance使用心得
    IIS7中配置FastCGI运行PHP
    Node.js入门
    Excel的文件打开特别慢,xls文件特别大解决一例
    SQL Server开启READ_COMMITTED_SNAPSHOT
    [转]最全的常用正则表达式大全——包括校验数字、字符、一些特殊的需求等等本文出处
    “VS2013无法连接远程数据库”解决方案
  • 原文地址:https://www.cnblogs.com/Yuuki-/p/10633159.html
Copyright © 2011-2022 走看看