链式栈的实现(C语言)

小编使用的编译器CLion。如有问题可以私信小编,有不懂得也可以私信哦。

* 构造链式栈

*      创建节点

*      判断是否为空

*      插入节点

*      取出节点

*      遍历栈

*      销毁栈



#include

#include

#include

typedef int ElemType;

typedef struct Node

{

    ElemType data;

    struct Node *next;

}LinkedStack,*LStack;

/*构造链式栈*/

LStack CreatStack()

{

  LStack stack = (LStack)malloc(sizeof(LinkedStack));

  if(!stack)

  {

      printf("链表创建失败!\n");

      exit(-1);

  }

  stack->next = NULL;

  stack->data = -1;

  printf("链表创建成功!\n");

  return stack;

}

/*创建节点*/

LStack CreatNode(ElemType data)

{

  LStack node = (LStack)malloc(sizeof(LinkedStack));

  if(!node)

  {

      printf("节点创建失败!\n");

      exit(-1);

  }

  node->data = data;

  node->next = NULL;

  printf("节点创建成功!\n");

  return node;

}

/*判断是否为空*/

int StackIsEmpty(LStack s)

{

  if(s->next==NULL)

  {

      return 1;

  }

  return 0;

}

/*插入值为data的节点到栈顶*/

void PushNode(LStack s,ElemType data)

{

  LStack newnode = CreatNode(data);

  while(s->next!=NULL)

  {

      s=s->next;

  }

  s->next = newnode;

  printf("节点-- %d --插入成功!\n",data);

}

/*取出栈顶节点*/

ElemType PopNode(LStack s)

{

  if(StackIsEmpty(s))

  {

      printf("栈为空!\n");

      exit(-1);

  }

  ElemType pop_node_value;

  LStack popnode=NULL;

  while(s->next->next!=NULL)

  {

      s=s->next;

  }

  popnode = s->next;

  pop_node_value = popnode->data;

  free(popnode);

  s->next=NULL;

  return pop_node_value;

}

/*遍历栈内所有元素*/

void PrintStack(LStack s)

{

  if(StackIsEmpty(s))

  {

      printf("栈为空!\n");

      exit(-1);

  }

  while(!StackIsEmpty(s))

  {

      printf("%d->",PopNode(s));

  }

}

/*销毁栈*/

void DestroyStack(LStack s)

{

  while(!StackIsEmpty(s))

  {

      PopNode(s);

  }

  free(s);

  printf("栈销毁成功!\n");

}

int main()

{

  return 0;

}

你可能感兴趣的:(链式栈的实现(C语言))