| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 336 人关注过本帖
标题:新手求助!顺序栈的一些问题!
只看楼主 加入收藏
a597910538
Rank: 1
等 级:新手上路
帖 子:20
专家分:3
注 册:2011-5-21
结帖率:100%
收藏
 问题点数:0 回复次数:4 
新手求助!顺序栈的一些问题!
这个程序出的问题是,输入一个元素的话,输出没有问题,但是如果输入2个或2个以上的元素话就会出现问题!各位帮忙看看
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define maxsize 100
typedef struct node
{
    int top;
    char data[maxsize];
}depositort;

//typedef struct node depositort;//depositor仓库

void initstack(depositort *s)
{
    s->top=-1;
    printf("仓库已清空!\n");
}

int empty(depositort *s)
{
    if(s->top==0)
        return 1;
    else
        return 0;
}

char push(depositort *s,char x)//入栈
{
    if(s->top==maxsize-1)
    {
        printf("仓库已满\n");
        return 0;
    }
    else
    {
        
        s->top++;
        (s->data)[s->top]=x;
        printf("插入成功!\n");
        return 1;
    }
}

char pop(depositort *s)//出栈
{
    char x;
    if(!empty(s))
    {
        printf("仓库中没有产品!\n");
        x=NULL;
    }
    else
        {
            x=(s->data)[s->top];
            s->top--;
            printf("输出成功!\n");
        }
    return x;
}
void main()
{
    depositort s;
    int i,k=0;
    char ch;
    initstack(&s);
    while((ch=getchar())!='\n')
    {        
        push(&s,ch);
        k++;
    }
    for(i=0;i<k;i++)
    {
        printf("%c",pop(&s));
    }   
        printf("\n");
}

输出结果:
1.输入元素======>>a
仓库已清空!
a
插入成功!
输出成功!
a
Press any key to continue
2.输入元素======>>as
仓库已清空!
as
插入成功!
输出成功!
仓库中没有产品!
仓库中没有产品!
Press any key to continue
搜索更多相关主题的帖子: return 
2011-06-13 20:28
bccn_2012
Rank: 6Rank: 6
等 级:侠之大者
帖 子:158
专家分:447
注 册:2011-5-14
收藏
得分:0 
程序代码:
#include<stdio.h>

 #include<stdlib.h>

 #include<string.h>

 #define maxsize 100

 typedef struct node

 {
     int top;
     char data[maxsize];

 }depositort;

 
//typedef struct node depositort;//depositor仓库
 
void initstack(depositort *s)

 {
     s->top=-1;
     printf("仓库已清空!\n");

 }

 
int empty(depositort *s)

 {
     if(s->data)
         return 1;
     else
         return 0;

 }

 
char push(depositort *s,char x)//入栈
 {
     if(s->top==maxsize-1)
     {
         printf("仓库已满\n");
         return 0;
     }
     else
     {
         
         s->top++;
         (s->data)[s->top]=x;
         printf("插入成功!\n");
         return 1;
     }

 }

 
char pop(depositort *s)//出栈
 {
     char x;
     if(!empty(s))
     {
         printf("仓库中没有产品!\n");
         x=0;
     }
     else
         {
             x=(s->data)[s->top];
             s->top--;
             printf("输出成功!\n");
         }
     return x;

 }

 void main()

 { 
    depositort s;
     int i,k=0;
     char ch;
     initstack(&s);
      ch=getchar();
     while(ch!='\n')
     {        
         push(&s,ch);
         k++;
         ch=getchar();
     }
     for(i=0;i<k;i++)
     {
         printf("%c\n",pop(&s));
     }    
        printf("\n");

 }

 


emtpy() 函数有错。
2011-06-13 21:58
bccn_2012
Rank: 6Rank: 6
等 级:侠之大者
帖 子:158
专家分:447
注 册:2011-5-14
收藏
得分:0 
程序代码:
#include<stdio.h>

 #include<stdlib.h>

 #include<string.h>

 #define maxsize 100

 typedef struct node

 {
     int top;
     char data[maxsize];

 }depositort;

 
//typedef struct node depositort;//depositor仓库
 
void initstack(depositort *s)

 {
     s->top=-1;
     printf("仓库已清空!\n");

 }

 
int empty(depositort *s)

 {
     if(s->data)
         return 1;
     else
         return 0;

 }

 
char push(depositort *s,char x)//入栈
 {
     if(s->top==maxsize-1)
     {
         printf("仓库已满\n");
         return 0;
     }
     else
     {
         
         s->top++;
         (s->data)[s->top]=x;
         printf("插入成功!\n");
         return 1;
     }

 }

 
char pop(depositort *s)//出栈
 {
     char x;
     if(!empty(s))
     {
         printf("仓库中没有产品!\n");
         x=0;
     }
     else
         {
             x=(s->data)[s->top];
             s->top--;
             printf("输出成功!\n");
         }
     return x;

 }

 void main()

 { 
    depositort s;
     int i,k=0;
     char ch;
     initstack(&s);
      ch=getchar();
     while(ch!='\n')
     {        
         push(&s,ch);
         k++;
         ch=getchar();
     }
     for(i=0;i<k;i++)
     {
         printf("%c\n",pop(&s));
     }    
        printf("\n");

 }

 


emtpy() 函数有错。
2011-06-13 21:58
fragileeye
Rank: 5Rank: 5
等 级:职业侠客
威 望:2
帖 子:107
专家分:387
注 册:2011-5-21
收藏
得分:0 
我想知道,emp函数中指示top == 0为栈空,实际上top == -1才为栈空、、
这么改下试试,在pop()函数中改 if(emp());
emp()函数中改 if( top == -1)..
2011-06-13 22:01
a597910538
Rank: 1
等 级:新手上路
帖 子:20
专家分:3
注 册:2011-5-21
收藏
得分:0 
最终修正版
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define maxsize 100
typedef struct node
{
    int top;
    char data[maxsize];
}depositort;

//typedef struct node depositort;//depositor仓库

void initstack(depositort *s)
{
    s->top=0;
    printf("仓库已清空!\n");
}

int empty(depositort *s)
{
    if(s->top==0)
        return 1;
    else        
        return 0;
}

char push(depositort *s,char x)//入栈
{
    if(s->top==maxsize-1)
    {
        printf("仓库已满\n");
        return 0;
    }
    else
    {        
        s->top++;   
        (s->data)[s->top]=x;
        return 1;
    }
}

char pop(depositort *s)//出栈
{
    char x;
    if(empty(s))
    {
        printf("仓库中没有产品!\n");
        x=NULL;
    }
    else
        {
            x=(s->data)[s->top];
            s->top--;
        }
    return x;
}
void main()
{
    depositort s;
    int i,k=0;
    char ch;
    initstack(&s);
    while((ch=getchar())!='\n')
    {        
        push(&s,ch);
        k++;
    }
    for(i=0;i<k;i++)
    {
        printf("%c",pop(&s));
    }   
        printf("\n");
}
2011-06-14 11:30
快速回复:新手求助!顺序栈的一些问题!
数据加载中...
 
   



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

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