/*
Name: stack.c
Copyright: personal
Author: hojor
Date: 07-06-10 10:22
Description: stack
*/
#include <stdio.h>
#include <stdlib.h>
#include "stack.h"
#define EmptyTOS (-1)
#define MinStackSize (5)
#define ElementType int
struct StackRecord
{
int Capacity;
int TopOfStack;
ElementType * Array;
};
typedef struct StackRecord * Stack;
//function.list
int IsEmpty(Stack S);
int IsFull(Stack S);
void DisposeStack(Stack S);
void MakeEmpty(Stack S);
void Push(ElementType X,Stack S);
void Pop(Stack S);
ElementType Top(Stack S);
ElementType TopAndPop(Stack S);
Stack CreateStack(int MaxElements);
//create stack size of MaxElements
Stack CreateStack( int MaxElements)
{
Stack S;
if(MaxElements < MinStackSize)
printf("Stack size is too small\n");
S = (Stack)malloc(sizeof(struct StackRecord));
if(S == NULL)
printf("Out of space!!\n");
S->Array = (ElementType *)malloc(sizeof(ElementType)*MaxElements);
if(S->Array == NULL)
printf("Out of space!!\n");
S->Capacity = MaxElements;
MakeEmpty(S);
return S;
}
//release Stack routines
void DisposeStack(Stack S)
{
if(S != NULL)
{
free(S->Array);
free(S);
}
}
//Determine whether the stack is empty
int IsEmpty(Stack S)
{
return S->TopOfStack == EmptyTOS;
}
//Determine whether the stack is full
int IsFull(Stack S)
{
return S->TopOfStack == S->Capacity;
}
//create an empty stack routines
void MakeEmpty(Stack S)
{
S->TopOfStack = EmptyTOS;
}
//push stack
void Push(ElementType x,Stack S)
{
if(IsFull(S))
printf("Full stack\n");
else
S->Array[++S->TopOfStack]=x;
}
//return top of stack
ElementType Top(Stack S)
{
if(!IsEmpty(S))
return S->Array[S->TopOfStack];
printf("Empty stack");
return 0;
}
//pop stack
void Pop(Stack S)
{
if(IsEmpty(S))
printf("\nEmpty stack\n");
else
S->TopOfStack--;
}
//gave the top of stack and pop
ElementType TopAndPop(Stack S)
{
if(!IsEmpty(S))
return S->Array[S->TopOfStack--];
printf("\nEmpty stack\n");
return 0;
}
int main(void)
{
int i;
Stack s = CreateStack(10);
for(i=0;i<10;i++)
Push(i,s);
for(i=0;i<10;i++)
printf("%d ",TopAndPop(s));
DisposeStack(s);
system("pause");
return 0;
}
分享到:
相关推荐
栈stack算法:算法训练营 P68~74 题目类型 :栈stack问题 P69~74 原题解析 :见算法训练营 P74~74 */ #include using namespace std; int main() { cout栈算法"; cout初始值为 http://www.acm.org"<<'\n'; cout...
综上所述,C语言实现的栈Stack是一个基本的数据结构组件,它在编程中扮演着不可或缺的角色。通过理解和掌握栈的实现,开发者能够更好地解决复杂的问题,并优化代码效率。在`stack.h`和`testStack.c`中,我们可以看到...
数据结构 严蔚敏 栈 stack
用java实现的栈Stack类,不继承任何集合类,用对象数组实现
在这个主题中,我们专注于栈(Stack)这一重要的数据结构,它是基于C语言实现的。栈是一种线性数据结构,遵循“后进先出”(LIFO,Last In First Out)原则,它的操作类似于日常生活中的堆叠物品,最新的添加的物品...
UDP 协议栈 IP。V1.3 - ARP timeout and ability to reset the ARP IP/MAC cache Migration notes: v1.2 to v1.3 - UDP_complete_nomac and IP_Complete_nomac have generics to specify clock rate and ARP time...
栈(Stack)是一种特殊类型的数据结构,遵循“后进先出”(Last In First Out, LIFO)原则。栈在许多算法和问题解决中都有广泛应用,如深度优先搜索、表达式求值等。本文将详细介绍如何在Python中实现一个基本的栈...
这个函数首先获取当前栈指针`current_stack_pointer`,然后通过对齐操作找到`thread_info`的起始地址。对齐操作确保了地址能够对应到`thread_size`的边界,从而保证正确地访问`thread_info`结构。 通过这样的设计,...
1. 数据结构栈 2. 代码调用栈 3. 内存区域栈
如果你写了一个一直调用自身的死循环,那么恭喜你,很快就可以看到报错:Uncaught RangeError: Maximum call stack size exceeded。那么这个call stack size有多少呢? 1. 计算方法 如下的方法可以为你计算出你使用...
数据结构中的栈(Stack)是计算机科学中一种基础且重要的数据结构,它的核心特性是遵循后进先出(LIFO)原则。栈就像一个只允许在一端进行操作的线性容器,这一端被称为栈顶。栈的操作主要有两个基本操作:压栈...
1、掌握顺序栈的类型定义方法。 2、掌握在顺序栈上实现的六种基本算法。 2、掌握顺序栈的简单应用。 二、 实验内容 1、实现一个栈数据结构。 2、利用栈实现中缀表达式与前缀表达式的转换。 三、相关内容介绍 ...
在JS中实现栈(Stack)数据结构及使用方法是JavaScript数据结构与算法知识的一部分,它涉及对栈这种数据结构特性的理解和实现。栈是一种特殊的列表,其插入和删除操作仅限在一端进行,使得这一端被称为栈顶,而另...
本主题探讨的是如何利用栈(Stack)这一后进先出(LIFO)的数据结构来模拟队列(Queue)的先进先出(FIFO)特性,并实现队列的逆序输出。这里我们将详细讲解这一过程,以及相关的C语言代码实现。 栈是一种特殊的...
栈是一种特殊的线性数据结构,遵循“后进先出”(LIFO)的原则。在计算机科学中,栈常被用于解决各种问题,如表达式求值、递归、内存管理等。下面我们将深入探讨栈的基本概念、静态栈与链表栈的实现方式,以及它们在...
数组模拟栈是数据结构中的一个基础概念,它利用数组来实现栈这种线性数据结构。在计算机科学中,栈是一种后进先出(LIFO,Last In First Out)的数据结构,通常用于临时存储和处理数据。数组作为一种基本的内存分配...
链表模拟栈是一种数据结构实现方法,它使用链表来模拟传统的栈操作。栈是一种具有“后进先出”(LIFO)特性的数据结构,常用于递归、表达式求值、内存管理等场景。在计算机科学中,通常使用数组或动态数组来实现栈,...
Stack* stack = (Stack*)malloc(sizeof(Stack)); stack->data = (Node*)malloc(size * sizeof(Node)); stack->top = -1; stack->size = size; return stack; } ``` 3. 压栈、弹栈操作: ```c void push(Stack* ...
《Z-STACK协议栈详解与应用》 Z-STACK协议栈是无线传感器网络(Wireless Sensor Network, WSN)领域中广泛应用的一种软件栈,它主要为低功耗、短距离的无线通信提供了一套完整的解决方案。这个协议栈以其高效、稳定...