#ifndef STACK_H_INCLUDED
#define STACK_H_INCLUDED
typedef enum Status
{
ERROR = 0, SUCCESS = 1
} Status;
typedef int ElemType;
typedef struct SqStack
{
ElemType *elem;
int top;
int size;
} SqStack;
Status initStack(SqStack *s,int sizes);
Status isEmptyStack(SqStack *s);
Status getTopStack(SqStack *s,ElemType *e);
Status clearStack(SqStack *s);
Status destroyStack(SqStack *s);
Status stackLength(SqStack *s,int *length);
Status pushStack(SqStack *s,ElemType data);
Status popStack(SqStack *s);
void outStack(SqStack* s);
void checkinput(int* r);
#endif
#include"SqStack.h"
#include <stdio.h>
#include <stdlib.h>
Status initStack(SqStack* s, int sizes) {
s->elem = (ElemType*)malloc(sizes * sizeof(ElemType));
if (!s->elem)
return ERROR;
s->top = -1;
s->size = sizes;
return SUCCESS;
}
Status isEmptyStack(SqStack* s)
{
if (s->elem==NULL) {
printf("请先输入【1】创建顺序栈!\n");
}
else if (s->top == -1) {
printf("这是一个空栈!\n");
return SUCCESS;
}
else {
printf("这不是一个空栈!\n");
return ERROR;
}
}
Status getTopStack(SqStack* s, ElemType* e)
{
if (s->elem==NULL) {
printf("请先输入【1】创建顺序栈!\n");
}
else if (s->top == -1) {
printf("这是一个空栈!\n");
return ERROR;
}
else {
*e = s->elem[s->top];
printf("栈顶元素为:%d\n", *e);
return SUCCESS;
}
}
Status clearStack(SqStack* s)
{
if (s->elem==NULL) {
printf("请先输入【1】创建顺序栈!\n");
return ERROR;
}
else if (s->top == -1) {
printf("这是一个空栈!\n");
return ERROR;
}
else {
s->top = -1;
printf("清空成功!\n");
return SUCCESS;
}
}
Status destroyStack(SqStack* s)
{
if (s->elem==NULL) {
printf("请先输入【1】创建顺序栈!\n");
return ERROR;
}
else {
free(s->elem);
s->elem = NULL;
printf("销毁成功!\n");
return SUCCESS;
}
}
Status stackLength(SqStack* s, int* length)
{
if (s->elem==NULL) {
printf("请先输入【1】创建顺序栈!\n");
return ERROR;
}
else {
*length = s->top + 1;
printf("你的顺序栈现在的栈长为:%d\n",*length);
return SUCCESS;
}
}
Status pushStack(SqStack* s, ElemType data,char c[])
{
if (s->top == s->size - 1)
{
printf("栈已满!\n");
return ERROR;
}
else if (s->elem==NULL) {
printf("请先输入【1】创建顺序栈!\n");
return ERROR;
}
else {
printf("\n你想要增加的数据是:");
checkinput(&data);
s->top++;
s->elem[s->top] = data;
printf("\n数据【%d】压栈成功\n", data);
return SUCCESS;
}
}
Status popStack(SqStack* s)
{
if (s->top == -1) {
printf("这是一个空栈!\n");
return ERROR;
}
else if (s->elem==NULL) {
printf("请先输入【1】创建顺序栈!\n");
return ERROR;
}
else {
printf("数据【%d】出栈成功!\n", s->elem[s->top]);
s->top--;
return SUCCESS;
}
}
void outStack(SqStack* s) {
int i;
if (s->top==-1) {
printf("\n这是一个空栈!\n");
}
else if(!s->elem){
return;
}
else {
for (i = 0; i <= s->top; i++) {
printf("\n第%d个数据是:%d\n", i + 1, s->elem[i]);
}
}
}
void checkinput(int* r) {
int error = 0, i = 0;
char c[50] = { 0 };
do {
gets(c);
error = 0;
for (i = 0; c[i] != '\0'; i++) {
if (i == 0 && c[i] == '-')
{
continue;
}
if (c[i] < '0' || c[i]>'9')
error = 1;
}
if (error) printf("输入错误,请重新输入!\n");
} while (error);
*r = atoi(c);
}
#include"SqStack.h"
#include <stdio.h>
#include <stdlib.h>
int main() {
int i,num;
int* length = (int*)malloc(sizeof(int));
ElemType sizes;
ElemType data=0;
ElemType* e = (ElemType*)malloc(sizeof(ElemType));
SqStack *s=(SqStack*)malloc(sizeof(SqStack));
s->elem=NULL;
while (1) {
system("cls");
printf("\t\t\t|----------------------------------|\n");
printf("\t\t\t| 顺序栈基本操作 |\n");
printf("\t\t\t|----------------------------------|\n");
printf("\t\t\t| 1---创建顺序栈 |\n");
printf("\t\t\t| 2---判断是否为空 |\n");
printf("\t\t\t| 3---得到栈顶元素 |\n");
printf("\t\t\t| 4---清空顺序栈 |\n");
printf("\t\t\t| 5---销毁顺序栈 |\n");
printf("\t\t\t| 6---获取栈长 |\n");
printf("\t\t\t| 7---压栈 |\n");
printf("\t\t\t| 8---出栈 |\n");
printf("\t\t\t| 9---遍历输出 |\n");
printf("\t\t\t| 10---退出 |\n");
printf("\t\t\t|----------------------------------|\n");
printf("\t\t\t| 前端-Sheldonlee |\n");
printf("\t\t\t|----------------------------------|\n");
printf("\n请选择操作:\n");
checkinput(&num);
if (num >= 1 && num <= 10) {
switch (num) {
case 1: {
if (s->elem!=NULL) {
printf("\n已存在一个顺序栈,请先销毁此栈!\n");
}
else {
printf("请输入你的顺序栈长度:");
checkinput(&sizes);
if (sizes >= 0) {
initStack(s, sizes);
for (i = 0; i < sizes; i++) {
pushStack(s, data);
}
printf("\n顺序栈创建成功\n");
outStack(s);
}
else {
printf("\n顺序栈初始化失败,长度输入错误!\n");
}
}
break;
}
case 2: {
isEmptyStack(s);
break;
}
case 3: {
getTopStack(s, e);
outStack(s);
break;
}
case 4: {
clearStack(s);
break;
}
case 5: {
destroyStack(s);
break;
}
case 6: {
stackLength(s, length);
break;
}
case 7: {
pushStack(s, data);
break;
}
case 8: {
popStack(s);
break;
}
case 9: {
outStack(s);
break;
}
case 10:
destroyStack(s);
system("cls");
printf("\n\n\n\n\n\n\n\t\t\t\t尚有很多不足之处,望多多指教!\n\n\n\n\n\n\n");
exit(0);
break;
}
}
else
{
printf("\n请输入正确的数字。\n");
}
system("pause");
}
return 0;
}