使用单链表混淆堆栈

时间:2015-11-20 18:02:37

标签: c stack singly-linked-list

这就是我到目前为止所做的事情,我在链表和堆栈方面都很陌生,所以它们让我感到困惑,我想弄清楚如何做我的isempty函数,它应该是如果为空则给我1,如果不为空则给0。

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

typedef struct stack node;
typedef struct stack *link;

struct stack
{
   int val;
  link next;
};

// Global top variable
link top = NULL;


void push(int n)
{
  link tmp;
  tmp = malloc(sizeof(node));

  tmp->val = n;
  tmp->next = top;
  top = tmp;
}

int pop()
{
  int val = top->val;
  link tmp = top;
  top = top->next;
  free(top);

  return val;
}

int isempty()
{

}


void printstack()
{
  link tmp = top;

  while (tmp != NULL)
  {
      printf("%2d ", tmp->val);
      tmp = tmp->next;
  }
}

int main()
{
  int x, i, j;
  printf("Enter an integer: ");
  scanf("%2d ", &x);

  return 0;
}

1 个答案:

答案 0 :(得分:0)

首先,似乎函数pop有一个拼写错误

int pop()
{
  int val = top->val;
  link tmp = top;
  top = top->next;
  free(top);
  ^^^^^^^^^
  return val;
}

必须有free( tmp )而不是free( top )

此外,您应该检查函数内的堆栈是否为空。

我认为最好按以下方式定义功能

int pop( int *value )
{
    int success;

    if ( ( success = top != NULL ) )
    {
        *value = top->val;

        link tmp = top;
        top = top->next;
        free( tmp );
    }

    return success;
}

对于函数isempty`,它的实现很简单

int isempty()
{
    return top == NULL;
}