//(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
来自维基百科
分享到:
相关推荐
数组、链表、队列、栈数据结构特点,各自优点和缺点 在计算机科学中,数据结构是指用于组织和存储数据的方式。常见的数据结构包括数组、链表、队列、栈等。每种数据结构都有其特点、优点和缺点,本文将对这些数据...
栈的操作主要包括以下几个基本运算: 1. **判断栈是否为空**:`isEmpty()`方法检查栈中是否还有元素,如果size为0,则表示栈为空。 2. **清空栈**:`clear()`方法将栈中的所有元素移除,使size恢复到0,栈变为空。...
数组和链表是两种基本的数据结构,它们在存储和操作数据方面有着显著的区别。理解这些差异对于优化算法和设计高效的数据结构至关重要。 首先,数组是一种将同一类型的数据元素集合在一起的数据结构。每个元素都有一...
数组元素在栈区,链表元素在堆区。这是因为数组的大小是固定的,而链表的大小是动态的。栈区的内存是自动分配和释放的,而堆区的内存需要手动分配和释放。 4. 访问方式 数组使用下标来定位元素,时间复杂度为O(1)...
在这个主题中,我们将深入探讨链表和栈的基本操作,并结合提供的源代码进行解析。 首先,链表是一种线性数据结构,其中的元素并不在内存中连续存储。每个元素(节点)包含数据和指向下一个节点的指针。链表分为单向...
数组、链表、堆栈和队列是最基本的数据结构,任何程序都会涉及到其中的一种或多种。数据结构是指数据之间的相互关系,即组织形式,有逻辑结构和物理结构之分。逻辑结构有线性和非线性之分,而物理结构则是描述数据在...
链表分为单向链表、双向链表和循环链表等类型,它们各有优缺点,如单向链表插入和删除操作相对简便,但访问元素不如数组直接。 栈是一种后进先出(LIFO)的数据结构,常被比喻为一个堆叠的盘子。栈的操作主要包括压...
数组和链表是两种基本的数据结构,它们各自有其独特的优缺点,适用于不同的场景。下面将详细介绍这两种数据结构以及它们的区别。 首先,数组是一种线性数据结构,它将元素在内存中连续存放,每个元素占用相同的内存...
### 栈对数组的处理:理解栈的基本方法与数组交互 在计算机科学中,栈(Stack)是一种重要的数据结构,其操作遵循后进先出(Last In First Out, LIFO)的原则。栈在处理数组时展现出独特的便利性,尤其是在算法设计...
总结起来,这个压缩包文件提供了关于链表和数组栈的知识点,包括链表的基本概念、Python中如何模拟链表、数组栈的LIFO原理以及如何用链表实现数组栈以提高性能。通过学习这些内容,你可以深化对数据结构的理解,提升...
数组和链表是两种基本的数据结构,它们在内存管理和数据操作方面有着显著的差异,各自具有独特的优缺点,适用于不同的场景。 数组是一种线性数据结构,它的特点是: 1. **内存连续**:数组中的所有元素在内存中是...
数组和链表是两种基本的数据结构,它们在存储和处理数据方面有着不同的特性和应用场景。 首先,数组是一种线性数据结构,它在内存中分配了一段连续的空间来存储相同类型的数据。数组的主要优点在于它的随机访问性能...
栈的基本操作包括入栈(Push)、出栈(Pop)、查看栈顶元素(Peek)和判断栈是否为空(IsEmpty)。栈在计算机科学中的应用非常广泛,例如表达式求值、括号匹配、深度优先搜索(DFS)以及网页浏览历史记录的管理等。 ...
有些语言不提供指针与对象数据类型,以下代码通过多重数组实现链表结构及其基本操作。 用一个数组空间模拟分配堆。用一个头指针为free的链表来管理自由空间。用栈得push和pop操作来实现释放和分配空间。 三个数组...
数据结构是计算机科学中的核心概念,它...总之,理解和掌握链表、队列、栈和二叉树的基本操作和应用是成为优秀程序员的关键步骤。通过动手实践,你可以深入体会这些数据结构的精髓,从而在解决实际问题时更加游刃有余。
总的来说,约瑟夫环问题的解决体现了数据结构和算法的巧妙结合,它不仅考察了基本的数据结构操作,还涉及到循环逻辑的设计和优化。无论是数组还是链表实现,都需要对数据结构有深入的理解,并能够根据问题特点灵活...
栈和队列的基本操作 栈是计算机科学中的一种基本数据结构,通过栈的基本操作,可以解决许多实际问题。在计算机专业的数据结构课程中,栈是一种非常重要的数据结构,它的基本操作包括入栈、出栈、栈顶元素访问等。栈...
数组和链表是两种基本的数据结构,它们在存储和访问数据方面有显著的差异,各自具有独特的优点和适用场景。了解这些区别对于理解和优化算法至关重要。 首先,数组是一种线性的数据结构,其特点是所有元素在内存中是...
顺序栈的基本操作包括入栈(push)、出栈(pop)、查看栈顶元素(top)以及检查栈是否为空(isEmpty)。 1. **入栈操作**: 当需要将一个元素压入栈中时,首先检查当前栈是否已满(即数组是否已达到最大容量)。如果...