1、顺序结构的栈
#define MaxSize 10
typedef char ElementType;
typedef struct{
ElementType elem[MaxSize];
int top;
}SqStack;
#include "MyStackSeq.h"
void InitStack(SqStack *&s)
{
s=(SqStack*)malloc(sizeof(SqStack));
s->top=-1;
}
void ClearStack(SqStack *&s){
free(s);
}
int StackLength(SqStack *s){
return s->top+1;
}
int StackEmpty(SqStack *s){
return s->top==-1;
}
int Push(SqStack *&s,ElementType e){
if(s->top+1==MaxSize){
return 0;
}
s->top++;
s->elem[s->top]=e;
return 1;
}
int Pop(SqStack *&s,ElementType &e){
if(s->top==-1){
return 0;
}
e=s->elem[s->top];
s->top--;
return 1;
}
int GetTop(SqStack *s,ElementType &e){
if(s->top==-1){
return 0;
}
e=s->elem[s->top];
return 1;
}
void DisplayStack(SqStack *s){
for (int i=s->top; i>=0; i--) {
printf("%c",s->elem[i]);
}
printf("\n");
}
2、链式结构的栈
typedef char ElementType;
typedef struct linknode{
ElementType data;
struct linknode *next;
}LiStack;
void InitStack(LiStack *&s){
s=(LiStack *)malloc(sizeof(LiStack));
s->next=NULL;
}
void ClearStack(LiStack *&s){
LiStack *p=s->next;
while(p!=NULL){
free(s);
s=p;
p=p->next;
}
free(s);
}
int StackLength(LiStack *s){
LiStack *p=s->next;
int i=0;
while (p!=NULL) {
i++;
p=p->next;
}
return i;
}
int StackEmpty(LiStack *s){
return s->next==NULL;
}
int Push(LiStack *&s,ElementType e){
LiStack *p=(LiStack*)malloc(sizeof(LiStack));
p->data=e;
p->next=s->next;
s->next=p;
return 1;
}
int Pop(LiStack *&s,ElementType &e){
if(s->next==NULL){
return 0;
}
LiStack *p=s->next;
e=p->data;
s->next=p->next;
free(p);
return 1;
}
int GetTop(LiStack *s,ElementType &e){
if(s->next==NULL){
return 0;
}
LiStack *p=s->next;
e=p->data;
free(p);
return 1;
}
void DisplayStack(LiStack *s){
LiStack *p=s->next;
while (p!=NULL) {
printf("%c",p->data);
p=p->next;
}
printf("\n");
}
分享到:
相关推荐
以下是一个简单的C语言顺序栈实现: ```c #include #define MAX_SIZE 100 typedef int ElementType; typedef struct { ElementType data[MAX_SIZE]; int top; } Stack; void InitStack(Stack* s) { s->top = ...
在本项目“C语言数据结构用栈实现四则运算”中,开发者利用栈这种数据结构来处理数学中的四则运算,包括加法(+)、减法(-)、乘法(*)和除法(/)。这种方法相比传统的递归或循环方式,通常更加简洁且易于理解。...
通过上述内容,我们可以看到,C++实现数据结构中的栈涉及到了许多编程基础,包括数据结构、STL的使用、模板编程以及内存管理等。理解并熟练掌握这些知识,对于提升编程能力及解决实际问题大有裨益。
在这个主题中,我们将深入探讨如何在Java中实现栈这一基本数据结构,具体包括顺序栈(stack_SqStack)和链栈(stack_SLinkList)。 栈是一种后进先出(Last In First Out, LIFO)的数据结构,常用于临时存储和快速...
在本主题中,我们将深入探讨数据结构中的一个重要组成部分——栈,并以C语言为实现平台。栈是一种特殊的线性数据结构,遵循“后进先出”(LIFO)的原则,即最后进入的元素最先被移出。 栈的基本操作通常包括: 1. ...
在本项目“数据结构之栈的实现”中,我们将深入探讨栈的概念、性质及其在编程中的应用,并结合VS2010环境下的实现方法。 栈的基本操作包括压入(Push)元素到栈顶和弹出(Pop)栈顶元素。在计算机科学中,栈常用于...
### 数据结构栈的实现 #### 实验目的 本次实验旨在帮助学生掌握栈的基本概念与实现方法,具体目标如下: 1. **理解栈的概念及其在内存中的存储方式**:熟悉栈的基本特性和工作原理,了解栈如何通过两种主要的存储...
数据结构中的顺序栈是一种特殊的线性表,它具有后进先出(LIFO)的特点,即...通过设计和实现顺序栈的基本操作,学生能够更好地掌握数据结构的原理和应用,而数制转换问题则进一步巩固了对数值计算和算法设计的理解。
在这个主题中,“数据结构之栈的定义及实现”将深入探讨栈的基本概念、操作以及在编程中的具体实现。 栈的定义: 栈是一种线性数据结构,它的特点是元素只能在栈的一端进行插入和删除操作,这一端被称为栈顶。新...
Educoder题目:数据结构-栈基本运算的实现及其应用答案解析.md
在这个名为“数据结构栈的实现实验”的项目中,我们主要关注的是栈这一重要的数据结构。栈是一种特殊的线性表,其操作遵循“后进先出”(LIFO)原则,即最后进入栈的元素最先被移出。在这个实验中,我们将学习如何...
数据结构-栈的C语言实现,随手笔记
数据结构双向栈实现实验,采用双向栈技术可实现对空间的有效利用!
`StackDrive.cpp`是驱动程序,它包含了测试栈实现的代码。在这个文件中,可以看到`Stack`类的实例化和各种操作,如初始化栈、压栈、弹栈等,以确保栈的正确功能。这通常是通过主函数(`main()`)来完成的,通过一...
### 迷宫寻路数据结构栈实现 #### 1. 栈的基本概念 - **定义**:栈是一种只允许在一端进行插入或删除操作的线性表。这一端被称为“栈顶”,另一端称为“栈底”。当把一个元素加入栈中时的操作称为“入栈”或“压栈...
### 数据结构栈和队列知识点解析 #### 一、栈的基本概念与操作 **栈**是一种特殊的线性表,只允许在一端进行插入和删除操作,这一端被称为栈顶,另一端被称为栈底。栈遵循先进后出(First In Last Out, FILO)的...
"数据结构栈实现进制的转换" 数据结构中,栈是一种重要的数据结构,它可以用来实现各种数据的转换。在这个例子中,我们将使用栈来实现十进制到十六进制的数据转换。 首先,让我们来了解一下栈的基本概念。栈是一种...
本文将详细介绍栈的三种常见实现方式:链栈、静态栈,并提供C/C++的实现代码,非常适合算法与数据结构的初学者学习。 ### 链栈 链栈是通过链表来实现的栈,每个节点包含一个数据元素和指向下一个节点的指针。链栈...
本主题关注的是如何使用C语言来实现数据结构中的栈和队列,这是两种基础但非常重要的抽象数据类型(ADT)。 栈(Stack)是具有后进先出(LIFO)特性的数据结构。它类似于一个堆叠的盘子,最新的元素被放在顶部,...
数据结构是计算机科学中的...总结来说,顺序栈是一种简单而有效的数据结构,利用数组实现,提供了快速的插入和删除操作。通过分析和理解上述代码,我们可以更好地掌握顺序栈的原理和使用方法,并能应用于实际问题中。