<>链式栈

在上节我们提到了顺序栈,而链式栈就是把顺序栈用链表的方式来存储,如果对链表和顺序栈的学习较为深刻的话,学习链式栈会非常容易。
首先第一步和单链表操作基本相同,创建一个结构体,一块是数据域,另一块是指针域,用来指向下一个元素;
typedef struct Stack{ int data; struct Stack *next; }Stack;
对于链式栈的结构,可以看下图:

然后我们来看链式栈的一些基本操作:
初始化栈:
Stack *InitStack(Stack *s)//初始化栈 { s=NULL; return s; }
判断栈是否为空栈:
bool emptystack(Stack* s) {//判断是否为空栈 if (s)return true; else return false; }
链式栈的入栈操作:
Stack* push(Stack* s, int newnum) {//链式栈的入栈操作 Stack* newstack=(Stack*)malloc(
sizeof(Stack)); newstack->data = newnum; newstack->next = s; s = newstack;
return s; }
逐个打印栈内元素
void print(Stack*s){ //逐个打印栈内元素 Stack *a=s; while(a){ printf("%d ",a->data); a
=a->next; } }
链式栈的出栈操作
Stack* pop(Stack* s,int *newnum) {//链式栈的出栈操作 if (s==NULL) { printf("栈已空");
return NULL; } else { *newnum = s->data; Stack* p = s; s = s->next; free(p);
return s; } }
然后我们在主函数测试一下这些函数:
int main() { Stack *s; s=InitStack(s); int i; for(i=1;i<=10;i++){ s=push(s,i);
} print(s); }
运行结果:

技术
今日推荐
下载桌面版
GitHub
百度网盘(提取码:draw)
Gitee
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:766591547
关注微信