概要

本章会先对栈的原理进行介绍,然后分别通过C/C++/Java三种语言来演示栈的实现示例。注意:本文所说的栈是数据结构中的栈,而不是内存模型中栈。内容包括:
1. 栈的介绍
2. 栈的C实现
3. 栈的C++实现
4. 栈的Java实现

转载请注明出处:http://www.cnblogs.com/skywang12345/p/3562239.html


更多内容: 数据结构与算法系列 目录

 

栈的介绍

栈(stack),是一种线性存储结构,它有以下几个特点:
(01) 栈中数据是按照"后进先出(LIFO, Last In First Out)"方式进出栈的。
(02) 向栈中添加/删除数据时,只能从栈顶进行操作。

栈通常包括的三种操作:push、peek、pop。
push -- 向栈中添加元素。
peek -- 返回栈顶元素。
pop  -- 返回并删除栈顶元素的操作。

 

1. 栈的示意图

栈的图文解析 和 对应3种语言的实现(C/C++/Java)【转】

栈中的数据依次是 30 --> 20 --> 10

 

2. 出栈

栈的图文解析 和 对应3种语言的实现(C/C++/Java)【转】

出栈前:栈顶元素是30。此时,栈中的元素依次是 30 --> 20 --> 10
出栈后:30出栈之后,栈顶元素变成20。此时,栈中的元素依次是 20 --> 10

 

3. 入栈

栈的图文解析 和 对应3种语言的实现(C/C++/Java)【转】

入栈前:栈顶元素是20。此时,栈中的元素依次是 20 --> 10
入栈后:40入栈之后,栈顶元素变成40。此时,栈中的元素依次是 40 --> 20 --> 10

 

下面介绍栈的实现,分别介绍C/C++/Java三种实现。

栈的C实现

共介绍4种C语言实现。
1. C语言实现一:数组实现的栈,并且只能存储int数据。
2. C语言实现二:单向链表实现的栈,并且只能存储int数据。
3. C语言实现三:双向链表实现的栈,并且只能存储int数据。
4. C语言实现四:双向链表实现的栈,能存储任意类型的数据。

 

1. C语言实现一:数组实现的栈,并且只能存储int数据

实现代码(array_stack.c)

栈的图文解析 和 对应3种语言的实现(C/C++/Java)【转】
  1 #include <stdio.h>
  2 #include <malloc.h>
  3 
  4 /**
  5  * C 语言: 数组实现的栈,只能存储int数据。
  6  *
  7  * @author skywang
  8  * @date 2013/11/07
  9  */
 10 
 11 // 保存数据的数组
 12 static int *arr=NULL;
 13 // 栈的实际大小
 14 static int count;
 15 
 16 // 创建“栈”,默认大小是12
 17 int create_array_stack(int sz) 
 18 {
 19     arr = (int *)malloc(sz*sizeof(int));
 20     if (!arr) 
 21     {
 22         printf("arr malloc error!");
 23         return -1;
 24     }
 25 
 26     return 0;
 27 }
 28 
 29 // 销毁“栈”
 30 int destroy_array_stack() 
 31 {
 32     if (arr) 
 33     {
 34         free(arr);
 35         arr = NULL;
 36     }
 37 
 38     return 0;
 39 }
 40 
 41 // 将val添加到栈中
 42 void push(int val) 
 43 {
 44     arr[count++] = val;
 45 }
 46 
 47 // 返回“栈顶元素值”
 48 int peek() 
 49 {
 50     return arr[count-1];
 51 }
 52 
 53 // 返回“栈顶元素值”,并删除“栈顶元素”
 54 int pop() 
 55 {
 56     int ret = arr[count-1];
 57     count--;
 58     return ret;
 59 }
 60 
 61 // 返回“栈”的大小
 62 int size() 
 63 {
 64     return count;
 65 }
 66 
 67 // 返回“栈”是否为空
 68 int is_empty()
 69 {
 70     return size()==0;
 71 }
 72 
 73 // 打印“栈”
 74 void print_array_stack()
 75 {
 76     if (is_empty()) 
 77     {
 78         printf("stack is Empty\n");
 79         return ;
 80     }
 81 
 82     printf("stack size()=%d\n", size());
 83 
 84     int i=size()-1;
 85     while (i>=0)
 86     {
 87         printf("%d\n", arr[i]);
 88         i--;
 89     }
 90 }
 91 
 92 
 93 void main() 
 94 {
 95     int tmp=0;
 96 
 97     // 创建“栈”
 98     create_array_stack(12);
 99 
100     // 将10, 20, 30 依次推入栈中
101     push(10);
102     push(20);
103     push(30);
104 
105     //print_array_stack();    // 打印栈
106 
107     // 将“栈顶元素”赋值给tmp,并删除“栈顶元素”
108     tmp = pop();
109     printf("tmp=%d\n", tmp);
110     //print_array_stack();    // 打印栈
111 
112     // 只将“栈顶”赋值给tmp,不删除该元素.
113     tmp = peek();
114     printf("tmp=%d\n", tmp);
115     //print_array_stack();    // 打印栈
116 
117     push(40);
118     print_array_stack();    // 打印栈
119 
120     // 销毁栈
121     destroy_array_stack();
122 }
栈的图文解析 和 对应3种语言的实现(C/C++/Java)【转】

相关文章:

  • 2022-12-23
  • 2021-08-24
  • 2021-04-09
  • 2021-07-04
  • 2021-09-20
猜你喜欢
  • 2021-07-26
  • 2021-09-11
  • 2022-02-23
  • 2022-12-23
相关资源
相似解决方案