栈的基本操作

962098440 2017-10-19 05:52:39
#include<iostream>
#include<cstdlib>
using namespace std;

typedef struct node
{
int data;
struct node *next;
}NODE,*PNODE;

typedef struct stack
{
PNODE ptop;
PNODE pbottom;
}STACK,*PSTACK;

void init(PSTACK);
void push(PSTACK,int);
void traverse(PSTACK);
int main()
{
STACK s;

init(&s);//初始化
push(&s,1);
push(&s,2);
push(&s,3);
traverse(&s);
return 0;
}

void init(PSTACK ps)
{
ps->ptop=new NODE;
if(ps->ptop==NULL)
{
cout<<"动态内存分配失败!"<<endl;
exit(-1);
}
else
{
ps->pbottom=ps->ptob;
ps->ptob->next=NULL;
}
}

void push(PSTACK ps,int val)
{
PNODE p=new NODE;
p->data=val;
p->next=ps->ptop;
ps->ptop=p;
return;
}

void traverse(PSTACK ps)
{
PNODE p=ps->ptop;
while(p!=ps->pbottom)
{
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
return;
}

我在初始化中,动态分配内存老是出错,各个大神能把我分析分析,讲解一下,有点懵
...全文
374 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
真相重于对错 2017-10-20
  • 打赏
  • 举报
回复
个人认为栈还是用数组,或者是堆上一段连续的内存来实现比较好。 如果用链式的方式,如果数据量大的话,容易造成很多内存碎片。 另外也比较好管理。
自信男孩 2017-10-20
  • 打赏
  • 举报
回复
#include<iostream>
#include<cstdlib>

using namespace std;

typedef struct node
{
    int data;
    struct node *next;
} NODE,*PNODE;

typedef struct stack
{
    PNODE ptop;
    PNODE pbottom;
}STACK,*PSTACK;

void init(PSTACK);
void push(PSTACK,int);
void traverse(PSTACK);

int main()
{
    STACK s;

    init(&s);//初始化
    push(&s,1);
    push(&s,2);
    push(&s,3);
    traverse(&s);
    return 0;
}

void init(PSTACK ps)
{
    ps->ptop = new NODE;
    if(ps->ptop == NULL)
    {
        cout<<"动态内存分配失败!"<<endl;
        exit(-1);
    }
    else
    {
        ps->pbottom = ps->ptop;
        ps->ptop->next = NULL;
    }
}

void push(PSTACK ps, int val)
{
    PNODE p = new NODE;
    p->data = val;
    p->next = ps->ptop;
    ps->ptop=p;
    return;
}

void traverse(PSTACK ps)
{
    PNODE p=ps->ptop;
    while(p!=ps->pbottom)
    {
        cout<<p->data<<"  ";
        p=p->next;
    }
    cout<<endl;
    return;
}
注意初始化栈函数里,tob和top单词拼写不一样。编译器应该已经检查出来了
赵4老师 2017-10-20
  • 打赏
  • 举报
回复
百度搜相关关键字。

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧