数据结构考研复习(链栈)
2021/8/3 6:07:35
本文主要是介绍数据结构考研复习(链栈),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
参考网上的内容,大部分的链栈实现用到了栈底和栈顶两个指针,而下文整理的这份代码,基本上与单链表的实现方式如出一辙。
与王道复习指导上给的栈的链式存储类型相一致。
#include<stdio.h> #include<malloc.h> typedef struct Linknode{ int data; struct Linknode *next; }Linknode,*LiStack; /* -1- 初始化链栈*/ bool InitStack(LiStack S){ S->next = NULL; return true; } /* -2- 判断是否栈空*/ bool StackEmpty(LiStack S){ if(S->next == NULL){ printf("空栈!\n"); return true; } else{ return false; } } /* -3- 进栈(插入元素)*/ bool Push(LiStack S,int e){ Linknode *temp; temp = (Linknode*)malloc(sizeof(Linknode)); temp->data = e;//!1 temp->next = S->next;//!2 S->next = temp;//!3 //!!!S->next是首元节点 return true; } /* -4- 读取栈顶元素*/ int GetTop(LiStack S,int e){ if(!StackEmpty(S)){ e = S->next->data;//!4 } else{ return false; } return e; } /* -5- 出栈*/ bool Pop(LiStack S,int e) { Linknode *temp = S->next; e = temp->data; S->next = temp->next; free(temp); return true; } int main(){ LiStack S; S = (LiStack)malloc(sizeof(Linknode)); InitStack(S); int l; printf("请输入元素个数:\n"); scanf("%d",&l); printf("请依次输入:\n"); for(int i=0; i<l; i++){ int m; scanf("%d",&m); Push(S,m); } int flag; printf("请进行选择:\n"); printf("==1.栈顶元素:\n"); printf("==2.依次输出栈内元素:\n"); scanf("%d",&flag); switch(flag){ case(1): { int e; printf("当前栈顶元素为:%d\n",GetTop(S,e)); break; } case(2): { int i=0; while(l > 0) { int n; printf("经过第%d次出栈操作后,当前栈顶元素为:%d\n",i,GetTop(S,n)); Pop(S,n); l--; i++; } printf("结束!\n"); break; } } return 0; }
最终结果:
这篇关于数据结构考研复习(链栈)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-26大厂数据结构与算法教程:入门级详解
- 2024-12-26大厂算法与数据结构教程:新手入门指南
- 2024-12-26Python编程入门指南
- 2024-12-26数据结构高级教程:新手入门及初级提升指南
- 2024-12-26并查集入门教程:从零开始学会并查集
- 2024-12-26大厂数据结构与算法入门指南
- 2024-12-26大厂算法与数据结构入门教程
- 2024-12-26二叉树入门教程:轻松掌握基础概念与操作
- 2024-12-26初学者指南:轻松掌握链表
- 2024-12-26平衡树入门教程:轻松理解与应用