/*** @author huihut* @E-mail:huihut@outlook.com* @version 创建时间:2016年9月9日* 说明:本程序实现了一个顺序栈。* 功能:有初始化、销毁、判断空、清空、入栈、出栈、取元素的操作。*/#include "stdio.h"#include "stdlib.h"#include "malloc.h"//5个常量定义#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define OVERFLOW -1//测试程序长度定义#define LONGTH 5//类型定义typedef int Status;typedef int ElemType;//顺序栈的类型typedef struct {ElemType *elem;int top;int size;int increment;} SqSrack;//初始化顺序栈Status InitStack_Sq(SqSrack &S, int size, int inc) {S.elem = (ElemType *)malloc(size * sizeof(ElemType));if (NULL == S.elem) return OVERFLOW;S.top = 0;S.size = size;S.increment = inc;return OK;}//销毁顺序栈Status DestroyStack_Sq(SqSrack &S) {free(S.elem);S.elem = NULL;return OK;}//判断S是否空,若空则返回TRUE,否则返回FALSEStatus StackEmpty_Sq(SqSrack S) {if (0 == S.top) return TRUE;return FALSE;}//清空栈Svoid ClearStack_Sq(SqSrack &S) {if (0 == S.top) return;S.size = 0;S.top = 0;}//元素e压入栈SStatus Push_Sq(SqSrack &S, ElemType e) {ElemType *newbase;if (S.top >= S.size) {newbase = (ElemType *)realloc(S.elem, (S.size + S.increment) * sizeof(ElemType));if (NULL == newbase) return OVERFLOW;S.elem = newbase;S.size += S.increment;}S.elem[S.top++] = e;return OK;}//取栈S的栈顶元素,并用e返回Status GetTop_Sq(SqSrack S, ElemType &e) {if (0 == S.top) return ERROR;e = S.elem[S.top - 1];return e;}//栈S的栈顶元素出栈,并用e返回Status Pop_Sq(SqSrack &S, ElemType &e) {if (0 == S.top) return ERROR;e = S.elem[S.top - 1];S.top--;return e;}int main() {//定义栈SSqSrack S;//定义测量值int size, increment, i;//初始化测试值size = LONGTH;increment = LONGTH;ElemType e, eArray[LONGTH] = { 1, 2, 3, 4, 5 };//显示测试值printf("---【顺序栈】---\n");printf("栈S的size为:%d\n栈S的increment为:%d\n", size, increment);printf("待测试元素为:\n");for (i = 0; i < LONGTH; i++) {printf("%d\t", eArray[i]);}printf("\n");//初始化顺序栈if (!InitStack_Sq(S, size, increment)) {printf("初始化顺序栈失败\n");exit(0);}printf("已初始化顺序栈\n");//入栈for (i = 0; i < S.size; i++) {if (!Push_Sq(S, eArray[i])) {printf("%d入栈失败\n", eArray[i]);exit(0);}}printf("已入栈\n");//判断非空if (StackEmpty_Sq(S)) printf("S栈为空\n");else printf("S栈非空\n");//取栈S的栈顶元素printf("栈S的栈顶元素为:\n");printf("%d\n", GetTop_Sq(S, e));//栈S元素出栈printf("栈S元素出栈为:\n");for (i = 0, e = 0; i < S.size; i++) {printf("%d\t", Pop_Sq(S, e));}printf("\n");//清空栈SClearStack_Sq(S);printf("已清空栈S\n");getchar();return 0;}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。