//栈的链式存储表示(在栈中,top指向栈顶元素)
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct SqStack{
struct SqStack *next;
int data;
}Node;
struct SqStack *top;//栈顶指针
//初始化栈
void InitStack(){
top = NULL;
}
//判断栈是否为空
bool EmptyStack(){
if(top==NULL)
return true;
else
return false;
}
//返回栈中的元素个数
int StackLength(){
Node *s;
int num = 0;
s = top;
while(s){
num++;
s = s->next;
}
return num;
}
//获取栈顶元素
int GetTop(){
return top->data;
}
//入栈
void Push(int value){
Node *s = (Node *)malloc(sizeof(Node));
s->data = value;
s->next = top;
top = s;
}
//出栈
bool Pop(int *e){
if(!EmptyStack()){
Node *s;
s = top;
*e = top->data;
top = top->next;
free(s);
}else{
return false;
}
return true;
}
//遍历栈
void StackTraverse(){
Node* s = top;
while(s){
printf("%d ",s->data);
s = s->next;
}
printf("\n");
}
int main()
{
int i=1;
int e;
InitStack();//构造一个空栈
for(i=1;i<=13;i++){
Push(i);//进行入栈
}
printf("遍历栈元素如下:\n");
StackTraverse();//遍历栈
int len = StackLength();
printf("出栈操作元素如下:\n");
for(i=1;i<=len;i++){//不要把StackLength()放置此处,会出现逻辑错误。
if(Pop(&e))
{
printf("%d ",e);
}else{
printf("出栈失败\n");
}
}
printf("\n");
//再次进行入栈,不然会影响后续测试
for(i=1;i<=13;i++){
Push(i);
}
//获取栈顶元素
printf("栈顶元素:%d\n",GetTop());
return 0;
}
数据结构与算法之栈的链式存储表示
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- /** * 用不带头结点的单链表构造的链式栈 * LinkedStack * 创建人:guxiaohao * 时间...
- 顺序存储结构就是用一组地址连续的存储单元依次存储该线性表中的各个元素。由于表中各个元素具有相同的属性,所以占用的存...