zoukankan      html  css  js  c++  java
  • // 顺序栈
    #include <stdlib.h>
    #include <stdio.h>
    
    #define STATUS_TRUE 1
    #define STATUS_FALSE 0
    #define MAXSIZE 100
    
    typedef int SElemType;
    /*
     * ADT - 栈的基本抽象数据类型:
     *		InitStack(*S)
     *		DestroyStack(*S)
     *		ClearStack(*S)
     *		StackEmpty(S)
     *		StackFull(S)
     *		Top(*S)
     *		Push(*S)
     *		Pop(*S)
     *		StackLength(S)
     */
    
     // 顺序栈基本数据结构
    typedef struct {
    	SElemType data[MAXSIZE];
    	int top;
    }Stack;
    
    
    /*  构造一个空栈S */
    void Initial(Stack* stack)
    {
    	stack->top = -1;
    }
    
    void Destroy(Stack* stack) {}
    
    /* 把S置为空栈 */
    void Clear(Stack* stack)
    {
    	stack->top = -1;
    }
    
    /* 空栈判定 */
    int Empty(Stack stack)
    {
    	return stack.top == -1;
    }
    
    /* 满栈判定 */
    int Full(Stack stack)
    {
    	return stack.top == MAXSIZE - 1;
    }
    
    /* 栈长 */
    int Length(Stack stack)
    {
    	//printf("stack length:%d
    ", stack.top + 1);
    	return stack.top + 1;								// 注意:stack.top + 1与stack.top++在这里大有区别
    }
    
    /* 入栈 */
    int Push(Stack *stack, SElemType e)
    {
    	if (Full(*stack))
    	{
    		return 0;
    	} 
    	else
    	{
    		stack->data[++stack->top] = e;
    		return 1;
    	}
    	
    }
    
    /* 出栈 */
    int Pop(Stack* stack, SElemType *e)
    {
    	if (Empty(*stack))
    	{
    		return 0;
    	}
    	else
    	{
    		*e = stack->data[stack->top--];
    		return 1;
    	}
    }
    
    /* 获取栈顶元素 */
    int Top(Stack* stack, SElemType* e)
    {
    	if (Empty(*stack))
    	{
    		return 0;
    	}
    	else
    	{
    		*e = stack->data[stack->top];
    		return 1;
    	}
    }
    
    void Traverse(Stack stack)
    {
    	
    	for (int i = 0; i < Length(stack); i++)
    	{
    		printf("stack element %d value:%d
    ", i, stack.data[i]);
    	}
    }
    
    int main()
    {
    	Stack stack;
    	SElemType e;
    	Initial(&stack);
    	
    	Push(&stack, 1);
    	Push(&stack, 2);
    	Push(&stack, 3);
    	Push(&stack, 4);
    	Push(&stack, 5);
    	Traverse(stack);
    	printf("=======================
    ");
    	Pop(&stack, &e);
    	Traverse(stack);
    	printf("Pop up elemnt:%d
    ", e);
    	printf("=======================
    ");
    	Top(&stack, &e);
    	Traverse(stack);
    	printf("Get top elemnt:%d
    ", e);
    }
    
  • 相关阅读:
    微信开发-Jssdk调用分享实例
    软件工程
    Homework_4 四则运算
    Homework 3
    每周总结
    自动生成四则运算题目
    Homework 1 -- The beginning
    程序员视角的餐饮行业
    iOS9网络适配_ATS:改用更安全的HTTPS
    Xcode的 发展史
  • 原文地址:https://www.cnblogs.com/neen/p/13564702.html
Copyright © 2011-2022 走看看