求助一个最简单的栈遇到的问题

honeyb2 2011-03-22 01:18:58
#include <stdio.h>
#include <stdlib.h>

typedef struct
{
int num[100];
int top;
}Stack;

Stack *s;

void *initial(Stack *s);
void push(Stack *s, int n);
int pop(Stack *s);


int main(void)
{
int i = 0, j, flag = 1, tmp, n, num[100];

initial(s);
printf("Please input stack num:");

while(flag)
{
scanf("%d", &n);
if(n != -1)
{
num[i] = n;
push(s, n);
i++;
}
else
{
flag = 0;
}
}
num[i] = '\0';

for(j = 0 ; j <= s->top ; j++)
{
tmp = pop(s);
if(num[j] = tmp)
{
flag = 1;
}
else
{
flag = 0;
}
}

if(1 == flag)
{
printf("是回文");
}
else
{
printf("不是回文");
}

return 0;

}

void *initial(Stack *s)
{
s->top = -1;
return(NULL);
}

void push(Stack *s, int n)
{
s->top++;
s->num[s->top] = n;
}

int pop(Stack *s)
{
int tmp = 0;
s->num[s->top] = tmp;
s->top--;
return(tmp);
}



调试的时候说 s->top CXX0030:Erorr:expression cannot be evaluated
求助啊!~
...全文
76 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
dxms8 2011-03-22
  • 打赏
  • 举报
回复
Stack *s没分配内存
newfarmerchi 2011-03-22
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <stdlib.h>
#include<malloc.h>


typedef struct stack
{
int num[100];
int top;
}Stack;

Stack *s;

Stack *initial(Stack *s);
void push(Stack *s, int n);
int pop(Stack *s);


int main(void)
{
int i = 0, j, flag = 1, tmp, n, num[100];

s=initial(s);
printf("Please input stack num:");

while(flag)
{
scanf("%d", &n);
if(n != -1)
{
num[i] = n;
push(s, n);
i++;
}
else
{
flag = 0;
}
}
//num[i] = '\0';

for(j = 0 ; j < s->top ; j++)//here
{
tmp = pop(s);
if(num[j] == tmp)//here
{
flag = 1;
}
else
{
flag = 0;
}
}

if(1 == flag)
{
printf("是回文");
}
else
{
printf("不是回文");
}

return 0;

}

Stack *initial(Stack *s)
{
s=( struct stack*)malloc(sizeof (struct stack));//初始化
s->top = -1;
return s;//返回s
}

void push(Stack *s, int n)
{
s->top++;
s->num[s->top] = n;
}

int pop(Stack *s)
{
int tmp ;//here
//s->num[s->top] = tmp;反了
tmp=s->num[s->top];
s->top--;
return(tmp);
}




yuyan_linger 2011-03-22
  • 打赏
  • 举报
回复


int pop(Stack *s)//这个函数改了
{
int tmp = s->num[s->top];
s->num[s->top--] = 0;
return(tmp);
}

int main()
{
int i = 0, j, tmp, n = 0, num[100];

Stack ss; // 改了
s = &ss;
initial(s);

while(true) //没错 也改了 你可以不改
{
printf("Please input stack num end with -1:");
scanf("%d", &n);
if(n == -1)
break;
num[i] = n;
push(s, n);
i++;
}
num[i] = 0;//写不写都行

for(j = 0 ; j <= s->top ; j++)
{
tmp = pop(s);
if(num[j] != tmp) //没错 也改了 你可以不改
{
printf("不是回文\n");
return 0;
}
}

printf("是回文\n");

return 0;
}
xali 2011-03-22
  • 打赏
  • 举报
回复
int main(void)
{
int i = 0, j, flag = 1, tmp, n, num[100];

s = new Stack;

initial(s);
printf("Please input stack num:");

while(flag)
{
scanf("%d", &n);
if(n != -1)
{
num[i] = n;
push(s, n);
i++;
}
else
{
flag = 0;
}
}
num[i] = 0;//'\0';

for(j = 0 ; j <= s->top ; j++)
{
tmp = pop(s);
if(num[j] == tmp)
{
flag = 1;
}
else
{
flag = 0;
}
}

if(1 == flag)
{
printf("是回文");
}
else
{
printf("不是回文");
}

delete s;
return 0;

}

int pop(Stack *s)
{
int tmp = 0;
tmp = s->num[s->top] ;
s->top--;
return(tmp);
}
有点小问题,其他的对了。

33,321

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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