`
hojor
  • 浏览: 108715 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

栈(stack)

 
阅读更多
/*
  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;
}

 

分享到:
评论

相关推荐

    C++栈stack算法 最全面

    栈stack算法:算法训练营 P68~74 题目类型 :栈stack问题 P69~74 原题解析 :见算法训练营 P74~74 */ #include using namespace std; int main() { cout栈算法"; cout初始值为 http://www.acm.org"&lt;&lt;'\n'; cout...

    C语言实现的栈Stack

    综上所述,C语言实现的栈Stack是一个基本的数据结构组件,它在编程中扮演着不可或缺的角色。通过理解和掌握栈的实现,开发者能够更好地解决复杂的问题,并优化代码效率。在`stack.h`和`testStack.c`中,我们可以看到...

    数据结构 严蔚敏 栈 stack

    数据结构 严蔚敏 栈 stack

    用java实现的栈Stack类

    用java实现的栈Stack类,不继承任何集合类,用对象数组实现

    基于C语言的数据结构-栈stack

    在这个主题中,我们专注于栈(Stack)这一重要的数据结构,它是基于C语言实现的。栈是一种线性数据结构,遵循“后进先出”(LIFO,Last In First Out)原则,它的操作类似于日常生活中的堆叠物品,最新的添加的物品...

    UDP 协议栈STACK

    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...

    基于python的数据结构代码实现-栈Stack

    栈(Stack)是一种特殊类型的数据结构,遵循“后进先出”(Last In First Out, LIFO)原则。栈在许多算法和问题解决中都有广泛应用,如深度优先搜索、表达式求值等。本文将详细介绍如何在Python中实现一个基本的栈...

    thread_info 与内核栈 stack 关系.pdf

    这个函数首先获取当前栈指针`current_stack_pointer`,然后通过对齐操作找到`thread_info`的起始地址。对齐操作确保了地址能够对应到`thread_size`的边界,从而保证正确地访问`thread_info`结构。 通过这样的设计,...

    pro648#tips#栈 Stack1

    1. 数据结构栈 2. 代码调用栈 3. 内存区域栈

    JS的函数调用栈stack size的计算方法

    如果你写了一个一直调用自身的死循环,那么恭喜你,很快就可以看到报错:Uncaught RangeError: Maximum call stack size exceeded。那么这个call stack size有多少呢? 1. 计算方法 如下的方法可以为你计算出你使用...

    数据结构-栈(Stack)介绍和Java示例代码

    数据结构中的栈(Stack)是计算机科学中一种基础且重要的数据结构,它的核心特性是遵循后进先出(LIFO)原则。栈就像一个只允许在一端进行操作的线性容器,这一端被称为栈顶。栈的操作主要有两个基本操作:压栈...

    栈和队列的应用实验 利用栈实现中缀表达式与前缀表达式的转换

    1、掌握顺序栈的类型定义方法。 2、掌握在顺序栈上实现的六种基本算法。 2、掌握顺序栈的简单应用。 二、 实验内容 1、实现一个栈数据结构。 2、利用栈实现中缀表达式与前缀表达式的转换。 三、相关内容介绍 ...

    JS栈stack类的实现与使用方法示例

    在JS中实现栈(Stack)数据结构及使用方法是JavaScript数据结构与算法知识的一部分,它涉及对栈这种数据结构特性的理解和实现。栈是一种特殊的列表,其插入和删除操作仅限在一端进行,使得这一端被称为栈顶,而另...

    用栈实现队列逆序输出

    本主题探讨的是如何利用栈(Stack)这一后进先出(LIFO)的数据结构来模拟队列(Queue)的先进先出(FIFO)特性,并实现队列的逆序输出。这里我们将详细讲解这一过程,以及相关的C语言代码实现。 栈是一种特殊的...

    Stack-栈实例

    栈是一种特殊的线性数据结构,遵循“后进先出”(LIFO)的原则。在计算机科学中,栈常被用于解决各种问题,如表达式求值、递归、内存管理等。下面我们将深入探讨栈的基本概念、静态栈与链表栈的实现方式,以及它们在...

    数组模拟栈

    数组模拟栈是数据结构中的一个基础概念,它利用数组来实现栈这种线性数据结构。在计算机科学中,栈是一种后进先出(LIFO,Last In First Out)的数据结构,通常用于临时存储和处理数据。数组作为一种基本的内存分配...

    链表模拟栈

    链表模拟栈是一种数据结构实现方法,它使用链表来模拟传统的栈操作。栈是一种具有“后进先出”(LIFO)特性的数据结构,常用于递归、表达式求值、内存管理等场景。在计算机科学中,通常使用数组或动态数组来实现栈,...

    用栈解决迷宫问题C语言描述

    Stack* stack = (Stack*)malloc(sizeof(Stack)); stack-&gt;data = (Node*)malloc(size * sizeof(Node)); stack-&gt;top = -1; stack-&gt;size = size; return stack; } ``` 3. 压栈、弹栈操作: ```c void push(Stack* ...

    Z-STACK协议栈

    《Z-STACK协议栈详解与应用》 Z-STACK协议栈是无线传感器网络(Wireless Sensor Network, WSN)领域中广泛应用的一种软件栈,它主要为低功耗、短距离的无线通信提供了一套完整的解决方案。这个协议栈以其高效、稳定...

Global site tag (gtag.js) - Google Analytics