一、栈的定义和特点
栈:限定仅在表尾进行插入或删除操作的线性表。因此,对栈来说,表尾端有其特殊含义,称为栈顶,相应地,表头端称为栈底。不含元素的空表称为空栈。
特点:栈的修改是按后进先出的原则进行的,因此,栈又称为后进先出(Last In First Out,LIFO)的线性表。
二、顺序栈的存储结构
#define MAXSIZE 8 //顺序栈存储空间分配量
typedef int datatype; //重定义顺序栈存储元素的类型
typedef struct //顺序栈的存储结构定义
{
int top; //顺序栈栈顶
datatype data[MAXSIZE]; //顺序栈存储元素
}StackList;
三、顺序栈的实现
3.1 顺序栈创建
StackList *Request_space() //在堆区创建空间
{
StackList *stack=(StackList *)malloc(sizeof(StackList));
if(NULL==stack)
return NULL;
stack->top=-1; //初始化栈顶
memset(stack->data,0,sizeof(stack->data)); //初始化顺序栈存储元素
return stack;
}
3.2 顺序栈遍历
int Output(StackList *stack) //实现输出
{
if(NULL==stack||stack->top==-1)
return -1;
for(int i=0;i<=stack->top;i++)
printf("%d ",stack->data[i]);
puts("");
return 0;
}
3.3 顺序栈压栈
int Push_stack(StackList *stack,datatype value) //顺序栈压栈
{
if(NULL==stack||stack->top==MAXSIZE-1)
return -1;
stack->data[++stack->top]=value;
return 0;
}
3.4 顺序栈入栈
int POP_stack(StackList *stack) //顺序栈出栈
{
if(NULL==stack||stack->top==-1)
return -1;
stack->top--;
}
四、多文件编辑实现顺序栈
头文件 head.h
#ifndef __HEAD_H__
#define __HEAD_H__
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXSIZE 8 //顺序栈存储空间分配量
typedef int datatype; //重定义顺序栈存储元素的类型
typedef struct //顺序栈的存储结构定义
{
int top; //顺序栈栈顶
datatype data[MAXSIZE]; //顺序栈存储元素
}StackList;
StackList *Request_space(); //在堆区创建空间
int Output(StackList *stack); //实现输出
int Push_stack(StackList *stack,datatype value); //顺序栈压栈
int POP_stack(StackList *stack); //顺序栈出栈
#endif
自定义函数 fun.c
#include "head.h"
StackList *Request_space() //在堆区创建空间
{
StackList *stack=(StackList *)malloc(sizeof(StackList));
if(NULL==stack)
return NULL;
stack->top=-1; //初始化栈顶
memset(stack->data,0,sizeof(stack->data)); //初始化顺序栈存储元素
return stack;
}
int Output(StackList *stack) //实现输出
{
if(NULL==stack||stack->top==-1)
return -1;
for(int i=0;i<=stack->top;i++)
printf("%d ",stack->data[i]);
puts("");
return 0;
}
int Push_stack(StackList *stack,datatype value) //顺序栈压栈
{
if(NULL==stack||stack->top==MAXSIZE-1)
return -1;
stack->data[++stack->top]=value;
return 0;
}
int POP_stack(StackList *stack) //顺序栈出栈
{
if(NULL==stack||stack->top==-1)
return -1;
stack->top--;
}
主函数 main.c
#include "head.h"
int main(int argc, const char *argv[])
{
StackList *stack=Request_space();
datatype value;
char c;
do
{
printf("please enter a value:");
scanf(" %d",&value);
Push_stack(stack,value);
printf("please enter whether to continue:");
scanf(" %c",&c);
}while(c!='N'&&c!='n');
Output(stack);
do
{
POP_stack(stack);
printf("please enter whether to continue:");
scanf(" %c",&c);
}while(c!='N'&&c!='n');
Output(stack);
return 0;
}