QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 612|回复: 0

堆栈的链接问题。

[复制链接]
发表于 2004-5-17 11:07:16 | 显示全部楼层 |阅读模式
以下程序编译成功,但运行结果出错。能帮我看看是哪里出错了。好吗

[code:1]
/*栈的链接实现*/

#include <stdio.h>

typedef struct node
{
  int data;
  struct node *next;
} LStackTp;

int main()
{
  LStackTp ls;
  int input;
  int i = 0;
  int outnum;
  InitStack(&ls);
  printf("请输入一些数字:");
  scanf("%d", &input);
  while (input != 0)
    {
      Push(&ls, input);
      scanf("%d", &input);
    }
  GetTop(&ls, &input);
  printf("\n当前栈顶的数为:%d\n", input);
  printf("请输入要出栈的个数:");
  scanf("%d", &outnum);
  printf("依此出栈的数为:");
  while (i < outnum)
    {
      Pop(&ls, &input);
      printf("%d ", input);
      i ++;
    }
  printf("\n当前栈的排列:");
  while (! EmptyStack(&ls))
    {
      Pop(&ls, &input);
      printf("%d ", input);
    }
  printf("\n\n");
}

int InitStack(LStackTp *ls)
{
  ls = NULL;
  return (1);
}

int Push(LStackTp *ls, int x)
{
  LStackTp *p;
  p = (LStackTp *) malloc (sizeof(LStackTp));
  p -> data = x;
  p -> next = ls;
  ls = p;
}

int Pop(LStackTp *ls, int *x)
{
  LStackTp *p;
  if (ls != NULL)
    {
      p = ls;
      *x = p -> data;
      ls = ls -> next;
      free(p);
      return 1;
    }
  else
    return 0;
}

int EmptyStack(LStackTp *ls)
{
  if (ls == NULL)
    return (1);
  else
    return (0);
}

int GetTop(LStackTp *ls , int *x)
{
  if (ls != NULL)
    {
      *x = ls -> data;
      return 1;
    }
  else
    return 0;
}
[/code:1]
您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-8 08:57 , Processed in 0.036808 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表