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("栈满!无法继续插入\n");
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\t", GetStackTop(&MyStack));  //打印栈顶元素   如果都不出栈  栈顶是不是永远都是广广
80             //在这里要进行出栈操作
81             Pop_Stack(&MyStack);  //都出栈完之后  栈为空 结束循环
82         }
83         printf("\n");
84     return 0;
85 }

2019-03-31  21:04:47 

猜你喜欢

转载自www.cnblogs.com/Yuuki-/p/10633159.html