`

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

阅读更多
//(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

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

相关推荐

    数组、链表、队列、栈数据结构特点,各自优点和缺点 数组和链表.pdf

    数组、链表、队列、栈数据结构特点,各自优点和缺点 在计算机科学中,数据结构是指用于组织和存储数据的方式。常见的数据结构包括数组、链表、队列、栈等。每种数据结构都有其特点、优点和缺点,本文将对这些数据...

    Java栈的实例-数组和链表两种方法 数组和链表.pdf

    栈的操作主要包括以下几个基本运算: 1. **判断栈是否为空**:`isEmpty()`方法检查栈中是否还有元素,如果size为0,则表示栈为空。 2. **清空栈**:`clear()`方法将栈中的所有元素移除,使size恢复到0,栈变为空。...

    数组和链表的区别 (2) 数组和链表.pdf

    数组和链表是两种基本的数据结构,它们在存储和操作数据方面有着显著的区别。理解这些差异对于优化算法和设计高效的数据结构至关重要。 首先,数组是一种将同一类型的数据元素集合在一起的数据结构。每个元素都有一...

    集合(链表和数组的区别) 数组和链表.pdf

    数组元素在栈区,链表元素在堆区。这是因为数组的大小是固定的,而链表的大小是动态的。栈区的内存是自动分配和释放的,而堆区的内存需要手动分配和释放。 4. 访问方式 数组使用下标来定位元素,时间复杂度为O(1)...

    链表和栈的基本操作及源代码

    在这个主题中,我们将深入探讨链表和栈的基本操作,并结合提供的源代码进行解析。 首先,链表是一种线性数据结构,其中的元素并不在内存中连续存储。每个元素(节点)包含数据和指向下一个节点的指针。链表分为单向...

    数组、链表、堆栈和队列、线性表和顺序表 数组和链表.pdf

    数组、链表、堆栈和队列是最基本的数据结构,任何程序都会涉及到其中的一种或多种。数据结构是指数据之间的相互关系,即组织形式,有逻辑结构和物理结构之分。逻辑结构有线性和非线性之分,而物理结构则是描述数据在...

    算法大全-面试题-链表-栈-二叉树-数据结构

    链表分为单向链表、双向链表和循环链表等类型,它们各有优缺点,如单向链表插入和删除操作相对简便,但访问元素不如数组直接。 栈是一种后进先出(LIFO)的数据结构,常被比喻为一个堆叠的盘子。栈的操作主要包括压...

    [数据结构]数组与链表的优缺点和区别 数组和链表.pdf

    数组和链表是两种基本的数据结构,它们各自有其独特的优缺点,适用于不同的场景。下面将详细介绍这两种数据结构以及它们的区别。 首先,数组是一种线性数据结构,它将元素在内存中连续存放,每个元素占用相同的内存...

    栈对数组的处理

    ### 栈对数组的处理:理解栈的基本方法与数组交互 在计算机科学中,栈(Stack)是一种重要的数据结构,其操作遵循后进先出(Last In First Out, LIFO)的原则。栈在处理数组时展现出独特的便利性,尤其是在算法设计...

    链表-使用Python基于链表实现数组栈.zip

    总结起来,这个压缩包文件提供了关于链表和数组栈的知识点,包括链表的基本概念、Python中如何模拟链表、数组栈的LIFO原理以及如何用链表实现数组栈以提高性能。通过学习这些内容,你可以深化对数据结构的理解,提升...

    数组和链表的区别 (1) 数组和链表.pdf

    数组和链表是两种基本的数据结构,它们在内存管理和数据操作方面有着显著的差异,各自具有独特的优缺点,适用于不同的场景。 数组是一种线性数据结构,它的特点是: 1. **内存连续**:数组中的所有元素在内存中是...

    数组和链表的理解,及各自的优缺点 数组和链表.pdf

    数组和链表是两种基本的数据结构,它们在存储和处理数据方面有着不同的特性和应用场景。 首先,数组是一种线性数据结构,它在内存中分配了一段连续的空间来存储相同类型的数据。数组的主要优点在于它的随机访问性能...

    数据结构中的栈之静态数组

    栈的基本操作包括入栈(Push)、出栈(Pop)、查看栈顶元素(Peek)和判断栈是否为空(IsEmpty)。栈在计算机科学中的应用非常广泛,例如表达式求值、括号匹配、深度优先搜索(DFS)以及网页浏览历史记录的管理等。 ...

    多重数组实现链表

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

    数据结构链表,队列,栈和二叉树的各种操作

    数据结构是计算机科学中的核心概念,它...总之,理解和掌握链表、队列、栈和二叉树的基本操作和应用是成为优秀程序员的关键步骤。通过动手实践,你可以深入体会这些数据结构的精髓,从而在解决实际问题时更加游刃有余。

    约瑟夫环问题(数组实现,链表实现

    总的来说,约瑟夫环问题的解决体现了数据结构和算法的巧妙结合,它不仅考察了基本的数据结构操作,还涉及到循环逻辑的设计和优化。无论是数组还是链表实现,都需要对数据结构有深入的理解,并能够根据问题特点灵活...

    栈的基本操作,进制转换

    栈和队列的基本操作 栈是计算机科学中的一种基本数据结构,通过栈的基本操作,可以解决许多实际问题。在计算机专业的数据结构课程中,栈是一种非常重要的数据结构,它的基本操作包括入栈、出栈、栈顶元素访问等。栈...

    链表和数组的区别 (2) 数组和链表.pdf

    数组和链表是两种基本的数据结构,它们在存储和访问数据方面有显著的差异,各自具有独特的优点和适用场景。了解这些区别对于理解和优化算法至关重要。 首先,数组是一种线性的数据结构,其特点是所有元素在内存中是...

    基于数组来实现的顺序栈和基于链表来实现的链式栈

    顺序栈的基本操作包括入栈(push)、出栈(pop)、查看栈顶元素(top)以及检查栈是否为空(isEmpty)。 1. **入栈操作**: 当需要将一个元素压入栈中时,首先检查当前栈是否已满(即数组是否已达到最大容量)。如果...

Global site tag (gtag.js) - Google Analytics