标题:数据结构顺序栈
只看楼主
yueayue
Rank: 1
等 级:新手上路
帖 子:26
专家分:4
注 册:2017-9-11
结帖率:75%
已结贴  问题点数:30 回复次数:6 
数据结构顺序栈
能帮忙看看哪个地方不对吗?谢谢
 int main()
{
    SqStack S;
    cout << "构造了一个空栈" << endl;;
    InitStack(S);
    int i,n,e;
    cout<<"输入栈的长度;"<<endl;
    cin >> n;
    Push(S,e);
    for(i=1;i<=n;i++)
    {
        cout << "输入栈的第"<<i<<"个元素"<<endl;
        ++*S.top;
        cin >>e;
    }
    cout << "……求出栈的长度……" <<endl;
    int m;
    m=StackLength(S);
    cout<< "栈的长度是:" <<endl;
    cout<< m << endl;
    cout<< "遍历输出栈中的所有元素:" <<endl;
    StackTraverse(S);
    cout<< endl;
    cout<< "……输出栈顶元素……" <<endl;
    e = GetTop(S);
    cout<< "栈顶元素是:" <<endl;
    cout<< e <<endl;
    return 0;
}
搜索更多相关主题的帖子: 数据结构  cout 长度 元素 
2017-12-28 15:33
yueayue
Rank: 1
等 级:新手上路
帖 子:26
专家分:4
注 册:2017-9-11
得分:0 
结果出来的是这样
构造了一个空栈
输入栈的长度;
3
输入栈的第1个元素
a
输入栈的第2个元素
输入栈的第3个元素
……求出栈的长度……
栈的长度是:
1
遍历输出栈中的所有元素:
-858993460
……输出栈顶元素……
栈为空!
栈顶元素是:
0
Press any key to continue
2017-12-28 15:35
GBH1
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:5
帖 子:112
专家分:510
注 册:2017-6-13
得分:10 
不知道的栈结构是怎么设计的,使用的时候栈顶指针难道不是自动增加的么,居然还要手动调整
2017-12-28 15:41
yueayue
Rank: 1
等 级:新手上路
帖 子:26
专家分:4
注 册:2017-9-11
得分:0 
这是编码
#include<iostream>
#include<string.h>
#include<stdlib.h>
#include<malloc.h>
using namespace std;
#define MAXSIZE 100
#define OVERFLOW 0
#define ERROR 0
#define ok 1
#define TRUE 1
#define FALSE 0
typedef int Status;
typedef int SElemType;
typedef struct
{
    SElemType *base;   //栈底指针
    SElemType *top;    //栈顶指针
    int stacksize;
}SqStack;
/****初始化****/
Status InitStack(SqStack &S)
{
    S.base=new SElemType[MAXSIZE];
    if(!S.base) exit(OVERFLOW);
    S.top=S.base;
    S.stacksize=MAXSIZE;
    return ok;
}
/****清空栈*****/
Status ClearStack(SqStack &S)
{
    S.top = S.base;
    return ok;
}
/*****判断栈是否为空栈******/
Status StackEmpty(SqStack S)
{
    if (S.top == S.base)
        return ERROR;
    else
        return TRUE;
}
/****取栈顶元素****/
Status GetTop(SqStack &S)
{
    if (StackEmpty(S))
    {
        cout << "栈为空!" << endl;
        return 0;
    }
    return *(S.top - 1);
}
/******入栈*****/
Status Push(SqStack &S,SElemType e)
{
    if(S.top-S.base==S.stacksize) return ERROR; //栈满
    *S.top++=e;
    return ok;
}
/*****栈的长度******/
Status StackLength(SqStack S)
{
    if (S.top == S.base)
        return FALSE;
    else
        return (S.top - S.base);//也可以直接返回S.top - S.base
}
/*****遍历元素*****/
void StackTraverse(SqStack S)
{
    SElemType *p=S.base;
    while (p<S.top)
    {cout<<*p;p++;}
}
/*****出栈******/
Status Pop(SqStack &S,SElemType &e)
{
    if(S.top==S.base) return ERROR;   //栈空
    e=*--S.top;
    return ok;
}
 int main()
{
    SqStack S;
    cout << "构造了一个空栈" << endl;;
    InitStack(S);
    int i,n,e;
    cout<<"输入栈的长度;"<<endl;
    cin >> n;
    Push(S,e);
    for(i=1;i<=n;i++)
    {
        cout << "输入栈的第"<<i<<"个元素"<<endl;
        ++*S.top;
        cin >>e;
    }
    cout << "……求出栈的长度……" <<endl;
    int m;
    m=StackLength(S);
    cout<< "栈的长度是:" <<endl;
    cout<< m << endl;
    cout<< "遍历输出栈中的所有元素:" <<endl;
    StackTraverse(S);
    cout<< endl;
    cout<< "……输出栈顶元素……" <<endl;
    e = GetTop(S);
    cout<< "栈顶元素是:" <<endl;
    cout<< e <<endl;
    return 0;
}
 
2017-12-28 15:43
yueayue
Rank: 1
等 级:新手上路
帖 子:26
专家分:4
注 册:2017-9-11
得分:0 
大神,帮帮忙
2017-12-28 15:46
GBH1
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:5
帖 子:112
专家分:510
注 册:2017-6-13
得分:10 
你这个写法我也是看晕了,整那么多宏定义和数据类型别名。栈结构设计是在是。。。。
刚目测了以下,入口函数出的变量e没有赋初值就被直接加入栈中了。
2017-12-28 15:57
liaohs
Rank: 4
等 级:业余侠客
威 望:7
帖 子:61
专家分:292
注 册:2017-11-26
得分:10 
++*S·top
这句错了。这是给栈顶元素加一,没有改其他因素。
2017-12-30 22:07



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-483802-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.591823 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved