栈的简介和特点
栈是限制在一端进行操作的线性表,允许进行操作的一端称
为栈顶,另一端为栈底,栈中没有元素时称为空栈。
逻辑结构:1对1的线性表
存储结构:顺序存储->顺序栈
链式存储->链式栈
常见操作:入栈、出栈
特点:后进先出(LIFO,LAST IN FIRST OUT)
顺序栈的实现
顺序栈的定义
#define N 20
typedef int data_type;
typedef struct stack
{
data_type arr[N];
int top;
}Stack;
创建栈
Stack *CreatStack(void)
{
Stack *pStack = (Stack *)malloc(sizeof(Stack));
if(NULL == pStack)
{
return NULL;
}
memset(pStack,0,sizeof(Stack));
pStack->top = -1;
return pStack;
}
入栈
int InsertStack(Stack *pStack,data_type item)
{
if(NULL == pStack)
{
return STACKNULL;
}
if(pStack->top == N-1)
{
return STACKFULL;
}
pStack->top++;
pStack->arr[pStack->top] = item;
return OK;
}
出栈
int OutStack(Stack *pStack)
{
if(NULL == pStack)
{
return STACKNULL;
}
if(pStack->top == -1)
{
return STACKEMPTY;
}
pStack->top--;
return OK;
}
显示
int ShowStack(Stack *pStack)
{
if(NULL == pStack)
{
return STACKNULL;
}
if(pStack->top == -1)
{
return STACKEMPTY;
}
int i = 0;
for(i = 0;i <= pStack->top;i++)
{
printf("%d ",pStack->arr[i]);
}
return OK;
}
全部代码
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N 20
typedef int data_type;
typedef struct stack
{
data_type arr[N];
int top;
}Stack;
enum ret
{
MALLOCERROR = -4,
STACKNULL,
STACKEMPTY,
STACKFULL,
OK,
};
void menu(void);
Stack *CreatStack(void);
int InsertStack(Stack *pStack,data_type item);
int OutStack(Stack *pStack);
int ShowStack(Stack *pStack);
int main(int argc, const char *argv[])
{
int op;
Stack *pStack = CreatStack();
data_type item;
while(1)
{
menu();
printf("input your op:");
scanf("%d",&op);
if(-1 == op)
break;
switch(op)
{
case 1:
{
printf("intput item:");
scanf("%d",&item);
InsertStack(pStack,item);
break;
}
case 2:
{
OutStack(pStack);
break;
}
case 3:
{
ShowStack(pStack);
break;
}
}
}
return 0;
}
void menu(void)
{
printf("****************\n");
printf("*1.insert*******\n");
printf("*2.out**********\n");
printf("*3.show*********\n");
printf("*-1.exit********\n");
printf("****************\n");
}
Stack *CreatStack(void)
{
Stack *pStack = (Stack *)malloc(sizeof(Stack));
if(NULL == pStack)
{
return NULL;
}
memset(pStack,0,sizeof(Stack));
pStack->top = -1;
return pStack;
}
int InsertStack(Stack *pStack,data_type item)
{
if(NULL == pStack)
{
return STACKNULL;
}
if(pStack->top == N-1)
{
return STACKFULL;
}
pStack->top++;
pStack->arr[pStack->top] = item;
return OK;
}
int OutStack(Stack *pStack)
{
if(NULL == pStack)
{
return STACKNULL;
}
if(pStack->top == -1)
{
return STACKEMPTY;
}
pStack->top--;
return OK;
}
int ShowStack(Stack *pStack)
{
if(NULL == pStack)
{
return STACKNULL;
}
if(pStack->top == -1)
{
return STACKEMPTY;
}
int i = 0;
for(i = 0;i <= pStack->top;i++)
{
printf("%d ",pStack->arr[i]);
}
return OK;
}