zoukankan      html  css  js  c++  java
  • 严奶奶数据结构---栈的实现

    用到的头文件

    // 用到的头文件
    #define STACK_INIT_SIZE 10 // 存储空间初始分配量
    #define STACK_INCREMENT 2 // 存储空间分配增量
    typedef int SElemType; // 定义栈元素类型
    typedef int Status;
    #define TRUE 1
    #define FALSE 0
    
    struct SqStack
    {
    	SElemType *base; // 在栈构造之前和销毁之后,base的值为NULL
    	SElemType *top; // 栈顶指针
    	int stacksize; // 当前已分配的存储空间,以元素为单位
    }; // 顺序栈
    
    

    实现代码:

    
    ```c
    #include<stdio.h>
    #include "stack.h"
    #include<stdlib.h>
    
    //初始化栈
    void InitStack(SqStack& S){
    	if (!(S.base = (SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType))))
    		exit(0);   //分配栈底指针失败
    	S.top = S.base;
    	S.stacksize = STACK_INIT_SIZE;
    }
    
    //销毁栈
    void DestroyStack(SqStack& S){
    	free(S.base);
    	S.base = NULL;
    	S.top = NULL;
    	S.stacksize = 0;
    }
    
    //置为空栈
    void ClearStack(SqStack& S){
    	S.top = S.base;
    }
    //判断是否栈空
    Status StackEmpty(SqStack& S){
    	if (S.top == S.base) return TRUE;
    	return FALSE;
    }
    //返回栈长
    Status StackLength(SqStack& S){
    	return S.top - S.base;
    }
    
    //取栈顶元素
    Status GetTop(SqStack& S, SElemType &e){
    	if (S.base == S.top) return FALSE;
    	e = *--S.top;
    	return e;
    }
    
    //进栈
    void Push(SqStack &S, SElemType e){
    	if (StackLength(S) < S.stacksize)
    		*(S.top++)= e;
    	else{
    		S.base = (SElemType*)realloc(S.base, STACK_INCREMENT*sizeof(SElemType));
    		if (!S.base) exit(0);
    		S.top = S.base + S.stacksize;
    		S.stacksize +=  STACK_INCREMENT;
    	}
    }
    //出栈
    Status Pop(SqStack &S, SElemType& e){
    	if (S.stacksize == 0) return FALSE;
    		e = *--S.top;
    		return TRUE;
    }
    
    //遍历栈
    void TraverStack(SqStack& S){
    	SElemType* p = S.top;        //为了便利不去动原来的top和base指针
    	if (S.stacksize == 0) return;
    	while (p != S.base)
    		printf("%d ",*(--p));
    }
    
    int main(){
    
    	SqStack stack;
    	SElemType E = 0;
    	InitStack(stack);
    	for (int i = 0; i < 10; i++)
    		Push(stack, i);
    	TraverStack(stack);
    	printf("
    ");
    	GetTop(stack, E);
    	printf("栈顶:%d
     ",E);
    	printf("栈的长度:%d
    ", StackLength(stack));
    	printf("栈是否为空:%d
    ", StackEmpty(stack));
    	DestroyStack(stack);//销毁栈
    	printf("栈的长度:%d
    ", StackLength(stack));
    	ClearStack(stack);
    	printf("栈的长度:%d
    ", StackLength(stack));
    
    	return 0;
    
    }
    
  • 相关阅读:
    电子科技大学实验中学PK赛(二)比赛题解
    伊苏比的梦幻之旅(三)比赛题解
    电子科技大学实验中学PK赛(一)比赛题解
    伊苏比的梦幻之旅(二)比赛题解
    伊苏比的梦幻之旅(一)比赛题解
    The Solution of UESTC 2016 Summer Training #1 Div.2 Problem C
    The Solution of UESTC 2016 Summer Training #1 Div.2 Problem B
    c++11 多线程间共享数据 <c++ concurrency in action>
    c++11 多线程 2<<c++ concurrency in action>>
    c++11 多线程 1<<c++ concurrency in action>>
  • 原文地址:https://www.cnblogs.com/liuzeyu12a/p/12358976.html
Copyright © 2011-2022 走看看