栈的顺序存储结构

    科技2025-07-10  15

    1.算法原理分析如下图:

    2.栈的顺序存储代码

    要依赖于上一篇文章中的seqlist_02.h和seqlist_02.cpp  线性表的顺序存储(业务结点和算法逻辑分离)

    seqstack.h代码如下:

    // seqstack.h #ifndef _MY_SEQSTACK_H_ #define _MY_SEQSTACK_H_ typedef void SeqStack; typedef void SeqStackNode; //直接在该函数里调用顺序表中的函数就可以了 SeqStack* SeqStack_Create(int capacity); //直接在该函数里调用顺序表中的函数就可以了 void SeqStack_Destroy(SeqStack* stack); //直接在该函数里调用顺序表中的函数就可以了 void SeqStack_Clear(SeqStack* stack); //和线性表的插入元素相同 只是限定了在表尾进行插入 int SeqStack_Push(SeqStack* stack, void* item); //和线性表删除元素相同 只是限制了在表尾进行删除 void* SeqStack_Pop(SeqStack* stack); //和线性表获取元素相同,只是限制了在表尾获取元素 void* SeqStack_Top(SeqStack* stack); //直接在该函数里调用顺序表中的函数就可以了 int SeqStack_Size(SeqStack* stack); 直接在该函数里调用顺序表中的函数就可以了 int SeqStack_Capacity(SeqStack* stack); #endif //_MY_SEQSTACK_H_

    seqstack.cpp如下

    #include<iostream> #include"seqstack.h" #include"seqlist_02.h" SeqStack* SeqStack_Create(int capacity) { return SeqList_Create(capacity); } void SeqStack_Destroy(SeqStack* stack) { SeqList_Destroy(stack); } void SeqStack_Clear(SeqStack* stack) { SeqList_Clear(stack); } int SeqStack_Push(SeqStack* stack, void* item) { int ret = SeqList_Insert(stack,item,SeqList_Length(stack)); return ret; } void* SeqStack_Pop(SeqStack* stack) { void *temp = SeqList_Delete(stack, SeqList_Length(stack)-1); return temp; } void* SeqStack_Top(SeqStack* stack) { void *temp = SeqList_Get(stack, SeqList_Length(stack)-1); return temp; } int SeqStack_Size(SeqStack* stack) { return SeqList_Length(stack); } int SeqStack_Capacity(SeqStack* stack) { return SeqList_Capacity(stack); }

    测试程序代码如下:

    #include "seqstack.h" #include<iostream> //自己定义业务结点 typedef struct tag_Student { char name[30]; int age; }Student; int main(int argc,char*argv[]) { Student s1; Student s2; Student s3; s1.age = 11; s2.age = 12; s3.age = 13; SeqStack *handle = SeqStack_Create(20); SeqStack_Push(handle, (SeqStackNode*)&s1); SeqStack_Push(handle, (SeqStackNode*)&s2); SeqStack_Push(handle, (SeqStackNode*)&s3); Student* tmp = (Student*)SeqStack_Top(handle); printf("栈顶元素的值是[%d]\n",tmp->age); //遍历删除元素 while (SeqStack_Size(handle) > 0) { Student* tmp = (Student*)SeqStack_Pop(handle); printf("被删除元素的值是[%d]\n", tmp->age); } SeqStack_Clear(handle); SeqStack_Destroy(handle); return 0; }

    输出结果截图如下:

     

    Processed: 0.010, SQL: 8