// 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 -2 typedef int ElemType; //元素类型 typedef int Status; //函数返回值 #define STACK_INIT_SIZE 100 // 栈的初始大小 #define STACK_INCREMENT 10 // 每次增加的空间大小 typedef struct { ElemType *base; //在构造栈之前和销毁之后,base的值为NULL ElemType *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~9 printf("\n压栈完成..."); Print_Stack(test_stack);//验证 //出栈... printf("\n元素出栈..."); for( i = 0; i< 10; i++) { if(Pop(test_stack,e)) printf("\n%d",e); } } return 0; }
原文:http://blog.csdn.net/zjc_game_coder/article/details/20063719