链式栈的实现(C语言)

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

* 构造链式栈

*      创建节点

*      判断是否为空

*      插入节点

*      取出节点

*      遍历栈

*      销毁栈



#include <stdio.h>

#include <stdlib.h>

#include <malloc.h>

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;

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。