算法基础(一):栈

来源:互联网 发布:同程网络 编辑:程序博客网 时间:2024/03/29 14:44
// DataStructure_ZJC.cpp : 定义控制台应用程序的入口点。/*一. 栈学习 */#include "stdafx.h"#include<stdio.h>#include<malloc.h>#include<stdlib.h>#define TRUE  1 #define FALSE 0#define OK    1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW   -2typedef int ElemType;//元素类型typedef int Status;//函数返回值#define STACK_INIT_SIZE 100// 栈的初始大小#define STACK_INCREMENT 10// 每次增加的空间大小typedef struct{ElemType *base;//在构造栈之前和销毁之后,base的值为NULLElemType *top;//栈顶指针ElemType stacksize; //当前已分配的存储空间,以元素为单位}ZJC_Stack;//---------------------------------------------栈基本操作的算法部分-------------------------------------------//栈的初始化Status InitStack(ZJC_Stack &S){//构造一个空栈S.base = (ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType));//分配内存空间if(!S.base)//分配失败则退出exit(OVERFLOW);//否则分配成功else{S.top = S.base;//栈顶指针指向...S.stacksize  = STACK_INIT_SIZE;//指定栈的当前大小return  OK;}}//获得栈顶元素Status GetTop(ZJC_Stack S,ElemType &e){if(S.top == S.base )return ERROR;e = *(S.top - 1);return OK;}//压栈Status Push(ZJC_Stack &S,ElemType e){//插入元素e为栈顶元素if(S.top - S.base >= S.stacksize)//表示栈满了,需要追加存储空间{S.base = (ElemType*)realloc(S.base,(S.stacksize + STACK_INCREMENT) * sizeof(ElemType));if(!S.base)exit(OVERFLOW);S.stacksize += STACK_INCREMENT;///////////////////////////////////S.top = S.base + S.stacksize;}*S.top++ = e;return OK;}void Print_Stack(ZJC_Stack S)//打印出栈中的元素{ElemType *p = S.base;//首先p指向栈底指针printf("\n 打印出栈中的所有元素:...\n");while( p != S.top)//只要没有到顶端,指针就移动,然后输出元素值{printf("栈中的元素:%d\n",*p);p++;}}//出栈函数Status Pop(ZJC_Stack &S,ElemType &e){if(S.top == S.base)//空栈,返回错误return ERROR;else//不是空栈{e = * --S.top;return OK;}}int _tmain(int argc, _TCHAR* argv[]){ printf("栈学习,测试....");ZJC_Stack test_stack;int e;int i;if(InitStack(test_stack))//初始化栈,如果初始化成功,则压入元素,然后输出值,然后出栈{for( i = 0;i < 10;i++)Push(test_stack,i);//压入自然数 0~9printf("\n压栈完成...");Print_Stack(test_stack);//验证//出栈...printf("\n元素出栈...");for( i = 0; i< 10; i++){ if(Pop(test_stack,e)) printf("\n%d",e);}}return 0;}

1 0