C++_栈(链表)

链表的表示

  • 数据同过结点保存,因此需要先声明结构体
typedef struct stackNode{
    int data;
    stackNode *next;
}*stackLink;

初始化

  • 因为不需要头结点,所以直接将结点置空就可以
void createStack(stackLink &s){
    s = NULL;
}

入栈

  • 先判断栈是否已满,非满进行以下操作
  • 先声明一个新结点,将数据赋给结点数据域
  • 让新结点的指针指向初始结点
  • 将新结点赋给初始结点
void pushInto(stackLink &s,int e){
    stackLink p = new stackNode;
    p->data = e;
    p->next = s;
    s = p;
}

出栈

  • 先判断栈是否已空,非空进行以下操作
  • 因为考虑到释放内存问题,所以需要一个新结点保存首元结点
  • 将首元结点数据赋给已声明的变量,首元结点指向后一个结点
  • 将首元结点赋给新生成结点,删除掉新生成结点
  • 返回删除结点的数据
int popOutof(stackLink &s){
    if(s == NULL) return -1;
    int e = s->data;
    stackLink p = new stackNode;
    p = s;
    s = s->next;
    delete p;
    return e;
}

访问栈顶元素

  • 先判断是否栈空,非空进行以下操作
  • 返回栈顶元素的值
int getTop(stackLink &s){
    if(s != NULL)
        return s->data;
}

完整代码

#include<iostream>
using namespace std;

typedef struct stackNode{
    int data;
    stackNode *next;
}*stackLink;

void createStack(stackLink &s){
    s = NULL;
}
void pushInto(stackLink &s,int e){
    stackLink p = new stackNode;
    p->data = e;
    p->next = s;
    s = p;
}
int popOutof(stackLink &s){
    if(s == NULL) return -1;
    int e = s->data;
    stackLink p = new stackNode;
    p = s;
    s = s->next;
    delete p;
    return e;
}
int getTop(stackLink &s){
    if(s != NULL)
        return s->data;
}

int main(){
    stackLink s;
    createStack(s);
    pushInto(s,10);
    pushInto(s,12);
    pushInto(s,16);
    cout<<popOutof(s)<<endl;
    cout<<getTop(s);
    return 0;
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++中链表实现可以使用链表来模拟的结构。在这种实现中,我们可以使用std::list来作为底层数据结构。\[1\]的结构可以定义为一个类,其中包含一个std::list<int>类型的成员变量stk来存储中的元素。此外,我们可以使用两个迭代器bottom和top来表示底和顶。 入操作可以通过在链表的头部插入元素来实现。具体而言,我们可以使用std::list的push_front()函数将元素插入到链表的头部。在入操作中,我们需要将新元素插入到顶位置,并更新顶指针top。 下面是一个简单的C++代码示例,展示了如何使用链表实现的入操作: ```cpp void Stack::push(int value) { stk.push_front(value); top = stk.begin(); } ``` 在这个示例中,我们使用std::list的push_front()函数将新元素插入到链表的头部,然后将top指针更新为链表的第一个元素。 需要注意的是,由于链表没有固定的大小限制,因此在链表实现的中不会出现满的情况。\[1\]因此,我们可以根据需要随时向链表中添加新的元素。 希望这个回答能够帮助到你! #### 引用[.reference_title] - *1* [C++实现链表模拟)【每一步详细深入讲解,代码清晰、简单、易懂】](https://blog.csdn.net/weixin_55755506/article/details/128356314)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值