#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#define MAX 100
/**
*@Name:线性表--栈--顺序栈
*@Description:顺序栈的创建,元素的入栈、出栈取栈顶元素基本操作。
*@Author:Freedoman
*@Date: 2014-8-8
*/
struct SeqStack /*顺序栈结点类型*/
{
int elements[MAX]; /*栈元素*/
int top; /*栈顶*/
};
typedef struct SeqStack * PSeqStack;
/*函数声明*/
PSeqStack createNullSeqStack();
int isNullSeqStack(PSeqStack curSeqStack);
int pushElement(PSeqStack curSeqStack);
int popElement(PSeqStack curSeqStack);
int loadTopElement(PSeqStack curSeqStack);
void printStack(PSeqStack curSeqStack);
/*-----------------创建一个指定容量的空栈--------------*/
PSeqStack createNullSeqStack(){
printf("创建一个指定容量的空栈\n");
PSeqStack pastack=(PSeqStack)malloc(sizeof(PSeqStack));
if(pastack == NULL)
printf("创建失败!\n");
else
{
printf("创建成功!\n");
pastack->top = -1;
}
return pastack;
}
/*--------------判断当前栈是否为空-----------------*/
int isNullSeqStack(PSeqStack curSeqStack){
if(curSeqStack->top == -1){
printf("空栈!\n");
return 1;
}
else{
printf("非空栈!\n");
return 0;
}
}
/*---------元素入栈(限定栈顶操作)-------*/
int pushElement(PSeqStack curSeqStack){
printf("元素入栈!\n");
int data;
if(curSeqStack->top >= (MAX-1)){
printf("上溢!\n");
return 0;
}else{
curSeqStack->top += 1;
printf("请输入元素>>>");
scanf("%d",&data);
curSeqStack->elements[curSeqStack->top] = data;
printf("入栈成功\n");
printStack(curSeqStack);
return 1;
}
}
/*--------元素出栈(限定栈顶操作)-----------*/
int popElement(PSeqStack curSeqStack){
if(isNullSeqStack(curSeqStack)){
printf("下溢!\n");
return 0;
}else{
curSeqStack->top -=1;
printf("出栈成功!\n");
printStack(curSeqStack);
return 1;
}
}
/*--------------取栈顶元素---------------*/
int loadTopElement(PSeqStack curSeqStack){
printf("取栈顶元素\n");
if(isNullSeqStack(curSeqStack)){
return 0;
}
else{
printf("当前栈顶元素>>>>%d\n",curSeqStack->elements[curSeqStack->top]);
return (curSeqStack->elements[curSeqStack->top]);
}
}
/*-----------自顶至底打印当前栈元素----------*/
void printStack(PSeqStack curSeqStack){
int i;
printf("打印[");
for(i = curSeqStack->top; i >= 0; i-- ){
printf(" %d ",curSeqStack->elements[i]);
}
printf("]\n");
}
int main(){
int input;
PSeqStack curSeqStack = NULL;
printf("\n------顺序栈的基本操作------\n");
while(1){
printf("\n 1_创建一个指定容量的空栈\n 2_判断当前栈是否为空\n 3_元素入栈\n");
printf(" 4_元素出栈\n 5_取栈顶元素\n 6_自顶至底打印当前栈元素\n");
printf("\n请选择>>>");
scanf("%d",&input);
switch(input){
case 1 : curSeqStack = createNullSeqStack();break;
case 2 : isNullSeqStack(curSeqStack);break;
case 3 : pushElement(curSeqStack);break;
case 4 : popElement(curSeqStack);break;
case 5 : loadTopElement(curSeqStack);break;
case 6 : printStack(curSeqStack);break;
default : printf("当前输入有误!\n");
}
}
return 0;
}
线性表----顺序栈的基本操作
最新推荐文章于 2023-05-02 13:52:59 发布