| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1060 人关注过本帖
标题:求助。。。栈的操作。。
只看楼主 加入收藏
shenlanlan
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2011-8-25
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:11 
求助。。。栈的操作。。
#include<stdio.h>
#include<stdlib.h>

#define MAX 5

typedef struct{
    int *top;
    int *base;
    int size;
}sqstack;

void initstack(sqstack &s){
//    sqnode *p;
    s.base=(int*)malloc(sizeof(sqstack));
    if(s.base!=NULL)
        s.top=s.base;
        
   
}

int push(sqstack s,int e){//元素E入栈S
        *s.top=e;
        s.top++;
        ++s.size;
                return 0;
}

int pop(sqstack s){//元素出栈
    int e;
        s.top--;
    e=*s.top;
        return 0;
}

int gettop(sqstack s,int e){//用E返回栈的栈顶元素
    while(s.size){
        s.top--;
        e=*s.top;
    }
    return e;
}
int main(){
    sqstack s;
    int i,e;
    s.size=0;
    initstack(s);
    printf("现在是元素入栈:");
    for(i=1;i<=MAX;i++){
        scanf("%d",&e);
        push(s,e);
    }
   
    printf("它的栈顶元素是%d.\n",gettop(s,e));
    printf("现在是元素出栈:");
    for(i=1;i<=MAX;i++){
        e=pop(s);
        printf("%3d",e);//问题在这里,在出栈输出后,怎么都是‘0’呀?
    }
    printf("\n");
    return 0;        
}        
   
//希望大家帮我看看,谢谢喽!
搜索更多相关主题的帖子: include return 元素 
2011-11-07 23:34
绿茶盖儿
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:1
帖 子:363
专家分:1852
注 册:2011-9-3
收藏
得分:4 
你自己看一下你的pop函数,每次返回的都是0值,e当然就都等于0了
2011-11-08 00:23
shenlanlan
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2011-8-25
收藏
得分:0 
回复 2楼 绿茶盖儿
改为return e后,出栈输出变成了随机数,问题在哪呢?我刚开始学,请详细说一下,谢谢了。
2011-11-08 22:37
leizisdu
Rank: 2
等 级:论坛游民
帖 子:22
专家分:24
注 册:2011-10-17
收藏
得分:4 
回复 楼主 shenlanlan
楼主,我在网上看到一位外国朋友写的关于栈的程序设计,认为您可以做如下改进:
    1、栈的存储结构中的top元素完全可以用int型,配合base元素,int型top完全可以达到遍历全栈的目的;
    2、你的pop()函数就能返回栈顶元素,为什么还要加个gettop()函数?
    3、您的push()和pop()函数的形参应该用指针或者应用类型吧!
    4、为了能更好地判断出栈或者入栈操作是否成功,可以让push()和pop()函数分别返回bool类型,至于对出栈元素的返回,可以让pop()函数再增加一个指针或引用类型形参;

[ 本帖最后由 leizisdu 于 2011-11-9 17:06 编辑 ]
2011-11-09 10:55
leizisdu
Rank: 2
等 级:论坛游民
帖 子:22
专家分:24
注 册:2011-10-17
收藏
得分:4 
回复 楼主 shenlanlan
具体代码如下:“
程序代码:
#include <stdio.h>
#include <stdlib.h>   // malloc()

#define  MAX 5

typedef struct{
    int top;
    int *base;
    int size;
}sq_stack;

void init_stack(sq_stack &s){
   s.size = MAX;
   s.base = (int*)malloc(sizeof(int) * s.size);
   if (s.base == NULL)
   {
      printf("内存空间不足!\n");
      exit(1);
   }
   s.top = -1; // top==-1表示栈空
}

bool push(sq_stack &s,int e){    //元素E入栈S
   if (!(s.top == (s.size - 1))) // 如果s.top==s.size-1, 表示栈已满
   {
      s.base[++(s.top)] = e;
      return true;
   }
   return false;
}

bool pop(sq_stack &s, int &e){  //元素出栈
   if (!(s.top == -1))        // 要想能出栈, 首先栈不能为空.
   {
      e = s.base[(s.top)--];
      return true;
   }
   return false;
}

int main(){
   sq_stack s;
   int i,e;
   init_stack(s);    // 其实, 栈的元素个数最好也可以人为指定.
   printf("现在是元素入栈(栈中最多只能存5个元素): ");
   for(i=1; i<=MAX; ++i){
      scanf("%d", &e);
      push(s, e);
   }
    
   printf("现在是元素出栈: ");
   for(i=1;i<=MAX;i++){
      //e=pop(s);
      pop(s, e);
      printf("%3d",e);
   }
   printf("\n");
   return 0;        
}        

”。

[ 本帖最后由 leizisdu 于 2011-11-10 08:53 编辑 ]
2011-11-09 10:55
leizisdu
Rank: 2
等 级:论坛游民
帖 子:22
专家分:24
注 册:2011-10-17
收藏
得分:4 
回复 楼主 shenlanlan
另外,楼主,有一点请注意,在输入元素的时候,要用空格分隔,而不能用“,”分隔。不知道这是为什么?对scanf()函数我还是不怎么会用,
2011-11-09 10:58
绿茶盖儿
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:1
帖 子:363
专家分:1852
注 册:2011-9-3
收藏
得分:4 
回复 3楼 shenlanlan
程序代码:
#include<stdio.h>
#include<stdlib.h>

#define MAX 5

typedef struct{
    int *top;
    int *base;
    int size;
}sqstack;

void initstack(sqstack &s){
//    sqnode *p;
    s.base=(int*)malloc((MAX+1)*sizeof(sqstack));

 //   if(s.base!=NULL)       
        s.top=s.base;
        
    
}

int push(sqstack &s,int e){//元素E入栈S    改动:加引用符&
        *s.top=e;
        s.top++;
        ++s.size;
                return 0;
}

int pop(sqstack &s){//元素出栈           改动:加引用符&
    int e;
    s.top--;
    e=*s.top;
    --s.size;          //改动:出栈后s.size要减1
        return e;
}

int gettop(sqstack s,int e){//用E返回栈的栈顶元素
    if(s.size){       //改动:把while改为if,不然这里只要s.size>0,就成了一个死循环了  
        s.top--;
        e=*s.top;
    }
    return e;
}
int main(){
    sqstack s;
    int i,e;
    s.size=0;
    initstack(s);
    printf("现在是元素入栈:");
    for(i=1;i<=MAX;i++){
        scanf("%d",&e);
        push(s,e);
    }
    
    printf("它的栈顶元素是%d.\n",gettop(s,e));
    printf("现在是元素出栈:");
   for(i=1;i<=MAX;i++){
        e=pop(s);      
        printf("%3d",e);//问题在这里,在出栈输出后,怎么都是‘0’呀?
  }
    printf("\n");
    return 0;        
}        
    


[ 本帖最后由 绿茶盖儿 于 2011-11-9 13:38 编辑 ]
2011-11-09 13:35
shenlanlan
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2011-8-25
收藏
得分:0 
回复 4楼 leizisdu
谢谢你了。
2011-11-11 21:06
leizisdu
Rank: 2
等 级:论坛游民
帖 子:22
专家分:24
注 册:2011-10-17
收藏
得分:0 
回复 8楼 shenlanlan
不用谢,我也正在学,
2011-11-12 09:25
Sv少
Rank: 3Rank: 3
来 自:山东青岛
等 级:论坛游侠
威 望:1
帖 子:53
专家分:168
注 册:2011-11-7
收藏
得分:0 
void initstack(sqstack &s)
{
     s.base=(int*)malloc((MAX+1)*sizeof(sqstack));  /*这样申请动态空间是不是有点浪费空间了: s.base=(int*)malloc((MAX+1)*sizeof(int));这样是不是会更好些*/
     if(s.base!=NULL)      
        s.top=s.base;   
}
新手上阵 若有错误 多多包涵!

Sv少  run
2011-11-12 20:28
快速回复:求助。。。栈的操作。。
数据加载中...
 
   



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

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