网站留言板带后台模板,裕安区韩摆渡镇,深圳联雅做网站怎么样,星宿网站建设如何用C实现一个顺序栈 数据结构 -- 栈的简介顺序栈 - 结构体的定义顺序栈的初始化顺序栈的销毁入栈出栈获取栈顶元素判断顺序栈是否为空返回顺序栈中元素的个数 数据结构 – 栈的简介 栈是插入和删除遵循先进后出原则的一种容器。 也是一种线性表对象存放在栈#xff0c; 可以… 如何用C实现一个顺序栈 数据结构 -- 栈的简介顺序栈 - 结构体的定义顺序栈的初始化顺序栈的销毁入栈出栈获取栈顶元素判断顺序栈是否为空返回顺序栈中元素的个数 数据结构 – 栈的简介 栈是插入和删除遵循先进后出原则的一种容器。 也是一种线性表对象存放在栈 可以在任意时间插入栈; 但是在任何时间只有栈顶元素才可以被删除栈的插入和删除都在同一端进行栈分为顺序栈和链栈两种 顺序栈 : 以顺序表的形式实现链栈 : 以节点组合的链表形式实现 对于数据结构 - 栈 一般需要以下几种要素: 指针域 : 顺序栈指针指向顺序表 链栈指针指向头节点栈的容量 : 记录栈的容量栈顶指针 : 用于入栈 出栈 获取栈顶元素等 甚至记录栈中元素总个数 顺序栈 - 结构体的定义
typedef int STDataType; // typedef 起别名 为了栈的通用性
typedef struct Stack
{STDataType* arr; // 数组指针 未来指向由new分配的数组int capacity; // 模拟栈的容量int top; // 模拟栈顶指针
}ST;顺序栈的初始化
// 顺序栈的初始化
void STInit(ST* ps)
{assert(ps); // 判断 ps指针是否为空ps-arr NULL;ps-capacity 0;ps-top 0; // top 0 , 代表栈顶指针指向栈顶元素的下一个位置。
}顺序栈的销毁
// 顺序栈的销毁
void STDestroy(ST* ps)
{assert(ps);assert(ps-arr); // 判断 数组指针是否为空 判断是否为空栈delete[] ps-arr;ps-capacity ps-top 0;
}
入栈
// 入栈
void STPush(ST* ps, STDataType val)
{assert(ps);if (!ps-arr) // 判断是否为空栈{ps-arr new STDataType[4];ps-capacity 4;ps-arr[ps-top] val;return;}if (ps-top ps-capacity) // 判断顺序栈是否已满{STDataType* newArr new STDataType[ps-capacity * 2];for (int i 0; i ps-top; i){newArr[i] ps-arr[i];}delete[] ps-arr;ps-arr newArr;ps-capacity * 2;ps-arr[ps-top] val;return;}if (!ps-arr){perror(new failed);exit(-1);}ps-arr[ps-top] val;
}出栈
// 出栈
void STPop(ST* ps)
{assert(ps);assert(ps-top);--ps-top;
}
获取栈顶元素
// 获取栈顶元素
STDataType STTop(ST* ps)
{assert(ps);assert(ps-top);return ps-arr[ps-top - 1];
}判断顺序栈是否为空
// 判断栈是否为空
bool STEmpty(ST* ps)
{assert(ps);return ps-top 0; //
}返回顺序栈中元素的个数
// 返回栈中元素的个数
int STSize(ST* ps)
{assert(ps);return ps-top;
}