数据结构-栈的基本操作

我与数据结构有个约会,带你领略不一样的数据结构!

/*
问题分析:栈和线性表的关联?
栈(包括队列)是线性表的重要应用,所以,他们在逻辑结构上,和线性表是一样的,有唯一后继和前驱;栈但是,栈是一种受限制的线性表
,他的插入和删除操作只能在一端(先进后出)。
*/

#include <stdio.h>
#include <stdlib.h>
#define Maxsize 100
typedef int ElemType;
typedef struct Sqstack{
    ElemType data[Maxsize];
    int top;
}; 

/*
问题分析:
1.为什么初始化栈顶为-1?
这是我们自己设置的,但是由于栈是依托数组进行操作,一般情况,我们喜欢把第一个元素的索引记成0,所以
我们栈顶初始化一般有一下两种:
A.top = -1;这时我们的操作:进栈时,先top+1,在进元素(一般开始元素的索引为0)
,出栈时,先弹出元素,再top-1。
B.top = 0;这时我们的操作:进栈时,先进元素,再top+1;出栈时,先top-1;再弹出
*/

//初始化
void InitStack(Sqstack &L){
    L.top = -1;
}

//进栈
bool Push(Sqstack &L,int e){
    if(L.top == Maxsize-1){ //此时,栈为满                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
        return false;
    }
    L.top++;
    L.data[L.top] = e;
    return true;
}

//出栈
bool  Pop(Sqstack &L,int &e){
    if(L.top == -1){  //此时,栈空
        return false;
    }
    e = L.data[L.top];
    printf("%d->",e); //查看删除元素
    L.top--;
    return true;
}
//输出(顺序输出)
void PrintStack(Sqstack L){
    for(int i=0;i<=L.top;i++){
        printf("%d->",L.data[i]);
    }
}
int main(){
    int x,e;
    Sqstack l;
    InitStack(l);
    for(int j=0;j<5;j++){  //入栈
        scanf("%d",&x);
        Push(l,x);
    }
    //PrintStack(l);
    printf("\n");
    for(int k=0;k<5;k++){
        Pop(l,e);
    }
    //PrintStack(l);
    system("pause");
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 凌晨四点被一个老家陌生的电话震醒 迷迷糊糊中纠结着按下了接听 安静的等待对方问候的话语 却只听到安静的小小的声音 ...
    苍吉枫亚阅读 1,256评论 0 0
  • 很多人都说在农村大家不比房子,都在攀比车子的。现在过年回家聚会上经常看到很多打工的同学,过年聚会上都抽着中华开着好...
    智慧同同阅读 8,320评论 11 27
  • 工作日里,我的生活基本是两点一线。早晨起来读书学习,七点半准备出发去公司,晚上下班后,又回到家里,静静待着——生活...
    马烈视界阅读 1,747评论 0 0
  • 《修道》第四天了,导讲什么已经不重要了,新老道友们都唏嘘不已地感叹,争着上台分享,有快乐的像婴儿的,有倾情无碍倒空...
    广明灯阅读 1,598评论 0 0
  • 工作之余,会做一点自己喜欢事情,比如:看书、练字、养花。 慢慢的这种习惯转变成了一种心情。不管有什么事情,喜欢一个...
    牧戎云越阅读 1,553评论 0 1

友情链接更多精彩内容