`

( 转)栈的基本操作(数组、链表)

阅读更多
//(1)数组
#include <stdio.h>
 #include <stdlib.h>
 /*堆疊資料結構*/
 struct Stack
 {
   int Array[10];//陣列空間
   int Top;//堆疊頂端指標       
 };
 /*檢查堆疊是否為空*/
 bool stack_empty(Stack *Stack1)
 {
   if(Stack1->Top==0)
   {
     return true;            
   }     
   else
   {
     return false;    
   }
 }
 /*推入資料*/
 void push(Stack *Stack1,int x)
 {
   Stack1->Top=Stack1->Top+1;
   Stack1->Array[Stack1->Top]=x;         
 }
 /*彈出資料*/
 int pop(Stack *Stack1)
 {
   if(stack_empty(Stack1))
   {
     printf("underflow");
   }
   else
   {
     Stack1->Top=Stack1->Top-1;
     return Stack1->Array[Stack1->Top+1];    
   }
 
 }
 int main()
 {
   struct Stack *Stack1=(struct Stack *)malloc(sizeof(struct Stack));//宣告資料結構空間
   Stack1->Top=0;//初始化
   push(Stack1,3);//推入3
   push(Stack1,4);//推入4
   push(Stack1,1);//推入1
   push(Stack1,10);//推入10
   printf("%d ",pop(Stack1));//彈出10
   printf("%d ",pop(Stack1));//彈出1
   printf("%d ",pop(Stack1));//彈出4
   system("pause");    
 }
//(2)链表
/*链栈的结构定义*/
 typedef struct { 
   SLink top;    // 栈顶指针 
   int length;   // 栈中元素个数
 }Stack;
 
 void InitStack ( Stack &S )
 { 
   // 构造一个空栈 S
   S.top = NULL;   // 设栈顶指针的初值为"空" 
   S.length = 0;   // 空栈中元素个数为0
 } // InitStack
 /*能否将链栈中的指针方向反过来,从栈底到栈顶?  
  不行,如果反过来的话,删除栈顶元素时,为修改其前驱指针,需要从栈底一直找到栈顶。*/ 
 
 
 void Push ( Stack &S, ElemType e )
 {
   // 在栈顶之上插入元素 e 为新的栈顶元素
   p = new LNode;   // 建新的结点
   if(!p) exit(1);  // 存储分配失败
   p -> data = e;
   p -> next = S.top; // 链接到原来的栈顶
   S.top = p;     // 移动栈顶指针
   ++S.length;     // 栈的长度增1
 } // Push
 /*在链栈的类型定义中设立"栈中元素个数"的成员是为了便于求得栈的长度。*/
 
 bool Pop ( Stack &S, SElemType &e )
 { 
   // 若栈不空,则删除S的栈顶元素,用 e 返回其值,
   // 并返回 TRUE;否则返回 FALSE
   if ( !S.top )
     return FALSE; 
   else 
     {
       e = S.top -> data;   // 返回栈顶元素 
       q = S.top; 
       S.top = S.top -> next; // 修改栈顶指针 
       --S.length;       // 栈的长度减1 
       delete q;       // 释放被删除的结点空间
       return TRUE;
     }
 } // Pop

 
来自维基百科
 
 
分享到:
评论

相关推荐

    多重数组实现链表

    有些语言不提供指针与对象数据类型,以下代码通过多重数组实现链表结构及其基本操作。 用一个数组空间模拟分配堆。用一个头指针为free的链表来管理自由空间。用栈得push和pop操作来实现释放和分配空间。 三个数组...

    入栈和出栈的基本操作.docx

    入栈(Push)和出栈(Pop)是栈(Stack)数据结构的两个基本操作。栈是一种后进先出(Last In, First Out,LIFO)的数据结构,类比于把一堆物体放在一起,后放入的物体先被取出。 下面是入栈和出栈的基本操作: 1....

    C语言入栈和出栈的基本操作.zip

    入栈和出栈的基本操作 入栈和出栈是栈(Stack)这种数据结构的核心操作,它们共同维护着栈的后进先出(LIFO)特性。下面,我们将对入栈和出栈操作进行更详细的介绍。 入栈(Push) 入栈操作是将一个新元素添加到...

    C++栈(stack)的模板类实现代码

     栈的基本操作有:pop,push,判断空,获取栈顶元素,求栈大小 2.构造栈  可以使用数组构造栈,也可以使用单向链表构造,我觉得使用单向链表更加灵活方便,下面的例子我使用单向链表来构造栈。  单向链表的头插...

    LeetCode题目分类与面试问题整理,附带所有java算法代码

    链表操作 q2_两数相加 q19_删除链表的倒数第N个节点 q25_k个一组翻转链表 q61_旋转链表 q138_复制带随机指针的链表 q160_相交链表 q206_反转链表 双指针遍历/滑动窗口 q3_无重复字符的最长子串 q11_盛最多水的容器 ...

    数据结构--数据结构的组织方法.pdf

    栈的基本操作: 栈的基本操作: ⾯试中关于栈的常见问题: ⾯试中关于栈的常见问题: Push——在顶部插⼊⼀个元素 Pop——返回并移除栈顶元素 isEmpty——如果栈为空,则返回 trueTop——返回顶部元素,但并不移除...

    C语言利用模板实现简单的栈类

    本文实例为大家分享了C语言利用模板实现简单的栈类(数组和单链表),供大家参考,具体内容如下 主要的功能是实现一个后进先出的列表,有入栈、出栈、返回大小、判空等基本功能 #pragma once using namespace std;...

    南航922大纲

    (1)顺序表和链表的存储与基本操作; (2)循环链表;双向链表; 3.栈和队列 (1)栈和队列的定义; (2)栈和队列的顺序和链式存储; (3)栈和队列的应用; 4.字符串 (1)字符串的定义、存储和操作; (2)...

    蓝桥杯(Python)相关知识点记录,包含基础知识点,数据结构等算法实现,真题练习

    数据类型:如整数、浮点数、字符串、列表、元组、字典等,以及它们的基本操作。 控制结构:如条件语句(if-elif-else)、循环语句(for、while)等。 函数定义与调用:如何定义函数,以及如何使用参数和返回值。 二...

    数据结构与常见算法,从递归开始,排序,至链表,队列,栈,树,图等。.zip

    基本操作:针对每种数据结构,定义了一系列基本的操作,包括但不限于插入、删除、查找、更新、遍历等,并分析这些操作的时间复杂度和空间复杂度。 算法: 算法设计:研究如何将解决问题的步骤形式化为一系列指令,...

    C语言 数据结构全书源代码(表、栈、队、串、树、图等)

    C语言实现的数据结构代码,主要有顺序表、链表、栈、队列、数组、串、树、图的定义、创建、基本操作、应用等 代码通俗易懂,逻辑清晰,注释 规范,适合借鉴代码,完成实验报告,研究数据结构等。

    数据结构一学期作业(顺序栈,三元组,串,树,邻接表,邻接矩阵,二叉树,等等代码c语言实现)

    2019/11/11 20:30 1,917 数组.cpp 2019/09/28 16:28 1,879 无头结点链表.cpp 2019/12/16 20:10 1,955 查找表.cpp 2019/11/25 21:17 2,442 树.cpp 2019/09/10 21:44 641 立方体.cpp 2019/10/24 18:28 3,455 算术...

    java数据结构和算法实践

    Java提供了丰富的数据结构,包括数组、链表、栈、队列、树、图等。掌握这些数据结构的特点、优缺点以及适用场景,对于编写高质量的代码至关重要。例如,当需要快速插入和删除操作时,链表比数组更加高效;当需要快速随机...

    数据结构实验报告及全套代码.zip

    数据结构实验报告及全套代码:实验一熟悉环境 实验二 顺序表的基本操作 实验三 单链表 实验四 双向链表 实验五 栈的操作 实验六 队列 实验七 串的操作 实验八数组操作 实验九二叉树的遍历 实验十 二叉树的应用 实验...

    软件工程之专题九:数据结构知识

    顺序存储的栈的基本操作如下: 判断栈满: int stackfull(seqstack *s) { return (s-&gt;top= =stacksize-1); } 进栈: void push(seqstack *s,datatype x) { if (stackfull(s)) error(“stack verflow”); s-&gt;data...

    数据结构中二叉树的模板实现c++,基本上二叉树所有的操作都有了

    程序的输入是数组,通过二叉树的数组表示创建的链表表示的二叉树,输出没有做成树型输出,感觉太复杂,而是按照广义表的输出方式输出 写的时候感觉大部分的操作实现都很简单,不过非递归方式的后序和中序的游标遍历搞的...

    常用的数据结构.doc

    一个数组可以分解为多个数组元素,这些数组元素可以是基本 数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数 组、指针数组、结构数组等各种类别。 栈 (Stack) 是只能在某一端插入和...

    突破程序员基本功的16课.part2

    11.2.2 二叉树的基本操作 11.2.3 二叉树的顺序存储 11.2.4 二叉树的二叉链表存储 11.2.5 二叉树的三叉链表存储 11.3 遍历二叉树 11.3.1 先序遍历 11.3.2 中序遍历 11.3.3 后序遍历 11.3.4 广度优先(按层)...

    数据结构 严蔚敏 代码

    1.4.18 二叉树的三叉链表存储的基本操作 201 范例1-72 二叉树的三叉链表存储表示 201 ∷相关函数:CreateBiTree函数 1.4.19 二叉树的二叉线索存储的基本操作 212 范例1-73 二叉树的二叉线索存储 212 ∷相关函数:...

Global site tag (gtag.js) - Google Analytics