栈的C++实现(指针)——创建-push-pop-top-清空栈-处理栈

今天学习了栈的C++实现,跟单链表很像:

push相当于单链表在第一个位置插入元素;

pop相当于单链表在第一个位置删除元素;

1、空栈检查

1 int stack::isEmpty(Stack *S)
2 {
3     return S->next == NULL;
4 }

2、创建一个空栈

 1 stack::Stack *stack::createStack()
 2 {
 3     Stack *S;
 4     S = (Stack*)new(Stack);
 5     //栈空间满后,溢出
 6     if (S == NULL)
 7         cout << "Out of space! " << ‘\n‘;
 8     S->next = NULL;
 9     makeEmpty(S);
10     return S;
11 }

空栈只有头结点,第9行表示若不为空栈则删除除头结点以外的所有结点。

3、清空栈(保留头结点)

1 void stack::makeEmpty(Stack *S)
2 {
3     if (isEmpty(S))
4         cout << "Donnot need to makeEmpty!" << ‘\n‘;
5     else
6         while (!isEmpty(S))
7             pop(S);
8 }

4、push操作

 1 stack::Stack *stack::push(int x, Stack *S)
 2 {
 3     Stack *tem;
 4     tem = (Stack*)new(Stack);
 5     if (tem == NULL)
 6     {
 7         cout << "Out of space! " << ‘\n‘;
 8     }
 9     else
10     {
11         cout << "please input the data to push: " << ‘\n‘;
12
13         scanf_s("%d",&x);
14
15         tem->Data = x;
16         tem->next = S->next;
17         S->next = tem;
18         return S;
19     }
20 }

5、top操作

 1 int stack::top(Stack *S)
 2 {
 3     if (isEmpty(S))
 4     {
 5         cout << "Empty stack! " << ‘\n‘;
 6         return -1;
 7     }
 8     else
 9         return S->next->Data;
10 }

6、pop操作(释放第一个结点后,显示该结点的数据元素)

 1 stack::Stack *stack::pop(Stack *S)
 2 {
 3     Stack *p;
 4     p = NULL;
 5     if (isEmpty(S))
 6         cout << "Empty stack! " << ‘\n‘;
 7     else
 8     {
 9         p = S->next;
10         cout << "the Data be poped is : " << p->Data << endl;
11         S->next = p->next;
12         free(p);
13         return S;
14     }
15 }

7、处理栈(删除包括头结点)

1 void stack::disposeStack(Stack *S)
2 {
3     if (S == NULL)
4         cout << "Donnot need to disposeStack! " << ‘\n‘;
5     while (!isEmpty(S))
6         pop(S);
7     free(S);
8 }

8、主函数

 1 int main()
 2 {
 3     cout << ‘\n‘ << "***************************************" << ‘\n‘ << ‘\n‘;
 4     cout << "Welcome to the stack world! " << ‘\n‘;
 5     cout << ‘\n‘ << "***************************************" << ‘\n‘ << ‘\n‘;
 6
 7     int i = 1;
 8     int j = 0;
 9     int topElement = 0;
10     stack *a = new stack;
11     stack::Stack *S = NULL;
12     int x = 0;
13     while (i)
14     {
15         cout << ‘\n‘ << "***************************************" << ‘\n‘;
16         cout << " 0 : end the stack " << ‘\n‘;
17         cout << " 1 : creat a stack " << ‘\n‘;
18         cout << " 2 : display the top element of stack  " << ‘\n‘;
19         cout << " 3 : push a node in the stack  " << ‘\n‘;
20         cout << " 4 : pop a node from the stack  " << ‘\n‘;
21         cout << "***************************************" << ‘\n‘;
22         cout << "Please input the function your want with the number above : " << ‘\n‘;
23         scanf_s("%d", &j);
24
25         switch (j)
26         {
27         case 1:
28             cout << "CreatStack now begin : ";
29             S = a->createStack();
30             break;
31         case 2:
32             topElement = a->top(S);
33             cout << "The top element of stack is : " << topElement;
34             break;
35         case 3:
36             cout << "push now begin : ";
37             S = a->push(x, S);
38             break;
39         case 4:
40             cout << "pop now begin : ";
41             S = a->pop(S);
42             break;
43         default:
44             cout << "End the stack. ";
45             a->disposeStack(S);
46             i = 0;
47             break;
48         }
49
50     }
51 }

运行结果:

时间: 2024-10-11 07:08:16

栈的C++实现(指针)——创建-push-pop-top-清空栈-处理栈的相关文章

顺序栈:创建&amp;初始化、入栈、出栈、计算栈中有效数据长度、获取栈顶数据、清空栈、销毁栈

/*    顺序栈的实现:    初始化    入栈    出栈    计算栈的有效数据长度    获取栈顶数据    清空栈    销毁栈*/ #include <stdio.h>#include <stdlib.h> #define ElemType int typedef struct __stackInfo{    ElemType *data;    unsigned int top;    unsigned int capacity;} stackInfo;/* 初始化

栈的C++实现(数组)——创建-push-pop-top-清空栈-处理栈

今天学习了利用数组方式的栈的C++实现,这种方式跟指针实现有很多不一样的地方: 栈的指针实现,栈的创建申请头结点,push需要申请新的结点,pop释放结点,这些结点都放在第一个位置,top时,S->next->data即可. 栈的数组实现,只申请一个结点,该结点的结构体内包含,数组的最大容量.栈顶元素下标.指向整形数组的指针(用于存放和删除新的元素). S->topOfStack == -1,空栈: S->topOfStack == S->capacity - 1,满栈: 1

汇编 push ,pop指令

知识点: ? PUSH ? POP ? CALL堆栈平衡 ? RETN指令 一.PUSH入栈指令 (压栈指令): 格式: PUSH 操作数 //sub esp,4 ;mov [esp],EBP 操作数可以是寄存器,存储器,或者立即数 二.POP出栈指令 (弹栈指令) 格式:POP 操作数 //mov EBP,[esp] ;add esp,4 操作数是寄存器,或者存储器,不能是立即数 三.代码分析 1.测试PUSH和POP 与ESP栈顶指针的关系 2.CALL与ESP的关系 3.总结栈的特点(后进

UINavigationController 多次连续 Push Pop 问题

最近要实现一个 连续 pop 两次 又 Push 一个新的 MVC 的需求,所以把经历写出来分享一下. NavgationController 是 iOS 中最常用的控制器了,先看官网文档: The UINavigationController class implements a specialized view controller that manages the navigation of hierarchical content. This navigation interface m

js 的数组怎么push一个对象. Js数组的操作push,pop,shift,unshift JavaScript使用push方法添加一个元素到数组末 JavaScript数组函数unshift、shift、pop、push使用

push()函数用于向当前数组的添加一个或多个元素,并返回新的数组长度.新的元素将会依次添加到数组的末尾. 该函数属于Array对象,所有主流浏览器均支持该函数. 语法 array.push( item1 [,items... ] )参数 参数 描述item1 任意类型添加到当前数组末尾处的元素.items 可选参数/任意类型要添加到当前数组末尾处的其他项,可以有多个.注意:如果添加的元素类型为数组类型(Array),仍然会被当作一个元素看待,只是这个元素是数组类型而已.如果要合并两个数组,请使

控制器逻辑跳转Push Pop

最近开发新项目,是一个商城类型的项目,其中商品详情是我负责的,界面没什么好说的,右侧navbarItem的弹窗有跳转到首页的选项,把我虐死了,而且同事还在添加了一个中转控制器,刚开始完全懵逼了,后来才慢慢理清. 先说说Push和Pop,这两个方法就是对一个栈的操作,push是向栈里面压入控制器,Pop是出栈,把控制器弹出,在栈做顶层的控制器被显示在界面上.如果你的栈里面没有A控制器,你想Pop到A显然是不行的.Pop需要的是同一个栈内的控制器间的操作. push控制器就是把控制器压入栈内,一个对

js 的数组怎么push一个对象. Js数组的操作push,pop,shift,unshift JavaScrip

push()函数用于向当前数组的添加一个或多个元素,并返回新的数组长度.新的元素将会依次添加到数组的末尾. 该函数属于Array对象,所有主流浏览器均支持该函数. 语法 array.push( item1 [,items... ] )参数 参数 描述item1 任意类型添加到当前数组末尾处的元素.items 可选参数/任意类型要添加到当前数组末尾处的其他项,可以有多个.注意:如果添加的元素类型为数组类型(Array),仍然会被当作一个元素看待,只是这个元素是数组类型而已.如果要合并两个数组,请使

解决 iOS View Controller Push/Pop 时的黑影

那么如何解决这个问题呢? 实际上很简单,如果这个 ViewController 是在 TabBarViewController 的 NavigationController 上 Push/Pop 的,那么只需要把 TabBarViewController 的 View 设置一下白色背景就可以了. 亲测设置NavigationController上的View的背景颜色为白色也可以解决.

javascript Array.push pop unshit shit

HTML代码: 1 <!DOCTYPE html> 2 <html lang="en"> 3 4 <head> 5 <meta charset="UTF-8"> 6 <title>Document</title> 7 <style type="text/css"> 8 *{font-family:Consolas;font-style: italic} 9 .sh