数据结构线性顺序栈
线性顺序栈简介
使用顺序存储结构的线性存储结构的栈为线性顺序栈,线性存储结构是元素逻辑结构一对一,顺序存储结构是元素物理结构连续,栈是只能在栈顶操作(先进后出).
C语言实现代码
#include<stdio.h>//包含标准输入输出库文件
#include<stdlib.h>//包含标准库库文件
typedef struct//类型定义结构
{
int*Array,Length;//整数指针数组,整数长度
}Sequential_Stack;//顺序栈
Sequential_Stack Sequential_Stack_Create(void)//顺序栈顺序栈创造,空
{
return(Sequential_Stack){malloc(sizeof(int))};//返回顺序栈成员数组赋值分配字节整数
}
void Sequential_Stack_Destroy(Sequential_Stack*sequential_stack)//空顺序栈销毁,顺序栈指针顺序栈
{
free(sequential_stack->Array);//释放顺序栈成员数组
}
void Sequential_Stack_Insert(Sequential_Stack*sequential_stack,int Insert_Data)//空顺序栈插入,顺序栈指针顺序栈,整数插入数据
{
sequential_stack->Array=realloc(sequential_stack->Array,++sequential_stack->Length*sizeof(int));//顺序栈成员数组赋值顺序栈成员数组重新分配加加顺序栈成员长度乘字节整数
sequential_stack->Array[sequential_stack->Length-1]=Insert_Data;//顺序栈成员数组顺序栈成员长度减1下标赋值插入数据
}
void Sequential_Stack_Delete(Sequential_Stack*sequential_stack)//空顺序栈删除,顺序栈指针顺序栈
{
--sequential_stack->Length;//减减顺序栈成员长度
}
int Sequential_Stack_Obtain(Sequential_Stack sequential_stack)//整数顺序栈获取,顺序栈顺序栈
{
return sequential_stack.Array[sequential_stack.Length-1];//返回顺序栈成员数组顺序栈成员长度减1下标
}
int Sequential_Stack_Size(Sequential_Stack sequential_stack)//整数顺序栈尺寸,顺序栈顺序栈
{
return sequential_stack.Length;//返回顺序栈成员长度
}
int main(void)//整数主,空
{
Sequential_Stack sequential_stack=Sequential_Stack_Create();//顺序栈顺序栈赋值顺序栈创造
for(int Select=5,Data;Select;scanf("%i",&Select))//循环,整数选择赋值5,整数数据,选择不等于0,格式扫描选择
{
if(Select==1)//如果,选择等于1
{
scanf("%i",&Data);//格式扫描数据
Sequential_Stack_Insert(&sequential_stack,Data);//顺序栈插入顺序栈最后数据
}
else if(Select==2)//否则如果,选择等于2
Sequential_Stack_Delete(&sequential_stack);//顺序栈插入顺序栈最后数据
else if(Select==3)//否则如果,选择等于3
printf("%i",Sequential_Stack_Obtain(sequential_stack));//格式打印顺序栈获取顺序栈最后数据
else if(Select==4)//否则如果,选择等于4
printf("%i",Sequential_Stack_Size(sequential_stack));//格式打印顺序栈尺寸顺序栈
}
Sequential_Stack_Destroy(&sequential_stack);//顺序栈销毁顺序栈
}
C++语言实现代码
#include<iostream>//包含输入输出流库文件
struct Sequential_Stack//结构顺序栈
{
int*Array=new int,Length=0;//整数指针数组赋值新整数,整数长度赋值0
~Sequential_Stack(void)//顺序栈析构,空
{
delete Array;//删除数组
}
void Insert(int Insert_Data)//空插入,整数插入数据
{
int*Temporary_Array=Array;//整数指针临时数组赋值数组
Array=new int[++Length];//数组赋值新加加长度乘整数
for(int Index=0;Index<Length;++Index)//循环,整数索引赋值0,索引小于长度,加加索引
Array[Index]=Temporary_Array[Index];//数组索引下标赋值临时数组索引下标
delete Temporary_Array;//删除临时数组
Array[Length-1]=Insert_Data;//数组长度减1下标赋值插入数据
}
void Delete(void)//空删除,空
{
--Length;//减减长度
}
int Obtain(void)//整数获取,空
{
return Array[Length-1];//返回数组长度减1下标
}
int Size(void)//整数尺寸,空
{
return Length;//返回长度
}
}sequential_stack;//顺序栈
int main(void)//整数主,空
{
for(int Select=5,Data;Select;std::cin>>Select)//循环,整数选择赋值5,整数数据,选择不等于0,标准输入选择
{
if(Select==1)//如果,选择等于1
{
std::cin>>Data;//标准输入数据
sequential_stack.Insert(Data);//顺序栈成员插入最后数据
}
else if(Select==2)//否则如果,选择等于2
sequential_stack.Delete();//顺序栈成员删除最后数据
else if(Select==3)//否则如果,选择等于3
std::cout<<sequential_stack.Obtain();//标准输出顺序栈成员获取最后数据
else if(Select==4)//否则如果,选择等于4
std::cout<<sequential_stack.Size();//标准输出顺序栈成员尺寸
}
}