回 帖 发 新 帖 刷新版面

主题:栈问题求教

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#define INIT_SIZE 100
#define INCREMENT 10
typedef struct {
  int *base;
  int *top;
  int stacksize;
}Sqstack;
Sqstack *create(Sqstack *cur){
  cur=(Sqstack *)malloc(INIT_SIZE*sizeof(Sqstack));
  if(!cur->base) exit(-1);
  cur->top=cur->base;
  cur->stacksize=INIT_SIZE;
  return cur;
}
Sqstack *push(Sqstack *cur,int data){
  cur->top++;
  [color=FF0000]*(cur->top)=data;//?????????什么问题?[/color]  
printf("%d",*(cur->top));
  return cur;
}
void display(Sqstack *cur){
  int *temp=NULL;
  temp=cur->base;
  while(temp!=cur->top){
    printf("%d ",*temp);
    temp++;
  }
}
void main(){
  Sqstack *cur=NULL,*temp=NULL,*temp2=NULL;
  int data=0;
  temp=create(cur);
  printf("%d,%d",temp->stacksize,temp->top);
  printf("input your data:");
  scanf("%d",&data);
  temp2=push(temp,data);
  printf("%d,%d",temp2->stacksize,temp2->top);
  display(temp2);
  free(temp);
}
这段代码编译可以通过,但是无法运行!我调试了一下好像是红色那句有问题,debug我也不是很了解所以不知道是不是真是那句的问题,如果是问题出在哪?希望高手能解答 

回复列表 (共4个回复)

沙发

Sqstack *push(Sqstack *cur,int data){
  cur->top++;
  *(cur->top)=data;//?????????什么问题?
-----------------------------------------
*(cur->top) = data;
cur->top++;

板凳

好像还是不行啊,哎,不知道是不是和指针声明又有关系!老是有CXX0030:Eroor:expression cannot be evaluated这个问题。。。

3 楼

push()中不用printf,你看看栈顶都移位了再printf会输出什么额?还有
void display(Sqstack *cur){
  int *temp=NULL;
  temp=cur->base;
  while(temp!=cur->top){
    printf("%d ",*temp);
    temp++;
  }
cur->top --后才表示栈顶啊。。
lz细心点吧。。

4 楼

Sqstack *push(Sqstack *cur,int data){
  cur->top++;
  *(cur->top)=data;//?????????什么问题?  
printf("%d",*(cur->top));
  return cur;
可以改为:
Sqstack *push(Sqstack *cur,int data)
{
  *(cur->top)=data;//?????????什么问题?
   cur->top++;  
printf("%d",cur->top);//这里cur-top就可以了,若改为*(cur->top)就表示地址了。不需要这么麻烦!
  return cur;

我来回复

您尚未登录,请登录后再回复。点此登录或注册