C语言栈底层接口实现指南
2026/7/6 4:27:36 网站建设 项目流程

首先问一个问题,cpu是如何访问内存中的数据的呢?

cpu不能直接访问内存数据,因为cpu太快了,内存太慢了,直接访问太影响效率了。操作系统会把内存中的数据压到cpu的内存缓存区中,具体压多少数据要看硬件,cpu在缓存区中拿到数据就是命中了。那么对于顺序表和链表在缓存利用率上就会有差别,顺序表利用率高而链表利用率就会低一些,因为在压数据时是成块压入的,链表不是连续存储的,在数据与数据之间会存在垃圾数据,而顺序表的数据是连续存放的所以顺序表的缓存利用率要高一些,而链表要低一些,虽然有差距但是差距不是很大,他的差距可能就像90分和80分的差距。

那么我们回归到栈上来,什么是栈呢?

栈是一种数据结构只允许在一端插入与删除,遵循后进先出,就是在删除数据时先删除最后存入的数据。

需要实现哪些栈的接口呢?

void STackInit(ST*ps);//初始化

void STPush(ST*ps);//压栈

void STPop(ST*ps);//出栈

void STDestory(ST*ps);//销毁栈

STDataTyoe STTop(ST*ps);//获取栈顶元素

int Size(ST*ps);//获取有效元素个数

栈的数据结构应该如何定义呢?

typedef struct Stack

{

int*a;//我个人喜欢用顺序表来定义栈,因为内存利用率高一些,再一个就是对于栈我们只需要尾插和尾删就可以了,用顺序表很舒服。

int top;//用top来访问栈顶元素来尾插和尾删;

int capacity;//顺序表可以存放的元素个数;

}

实现栈的注意事项

q1.关于top我们初始化时因该赋值多少呢?

可以赋值0也可以赋值-1(当热如果你想赋值多少都可以,正如我老师所言要用筷子吃饭)要注意的是如果要赋值-1的话就是栈顶元素如果赋值0的话就是栈顶的下一个元素。(这里还要看是先加加还是后加加),无论怎么搞核心是要弄清你希望top是栈顶还是栈顶的下一个,根据个人喜欢来吧,只要后续不出错用什么都可以。

总结

对于栈而言是一个相对简单的数据结构,有后进先出的特点,在插入和删除时固定一端。还有就是要想明白用什么为基础是用顺序表还是链表,还有就是对于top的初始化赋值要注意他是栈顶元素还是栈底元素。

欢迎访问我的Gitee 付信宇 (F19114020324) - Gitee.com

以上为学生对知识的理解如有错误欢迎指正。感谢

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询