数据结构基础【06】栈的链式实现

来源:互联网 发布:centos切换中文乱码 编辑:程序博客网 时间:2024/05/22 15:10

操作定义

初始化:InitStack
销毁: DestroyStack
清除: ClearStack
判空:StackEmpty
返回长度:StackLength
得到栈顶:GetTop
入栈:Push
出栈:Pop
遍历:StackTraverse

实现

#include <stdio.h>#include <stdlib.h>#define MAXSIZE 100 //顺序表可能达到的最大长度#define OK 1#define ERROR 0#define OVERFLOW -2//结构定义typedef struct StackNode{  int data;  struct StackNode *next;} StackNode, *LinkStack;//初始化int InitStack(LinkStack &S){  S = NULL;  return OK;}//入栈int Push(LinkStack &S, int e){  LinkStack p = new StackNode;  p->data = e;  p->next = S;  S = p;  return OK;}// 销毁int DestroyStack(LinkStack &S){  LinkStack p;  while (S)  {    p = S;    S = S->next;    delete p;  }  return OK;}//请空int ClearStack(LinkStack &S){  S->next = NULL;  return OK;}int StackEmpty(LinkStack S){  if (S->next == NULL)    return 1;  else    return 0;}int StackLength(LinkStack S){  int length = 0;  while(S->next != NULL)  {    length++;    S = S->next;  }  return length;}//出栈int Pop(LinkStack &S, int &e){  LinkStack p;  if (S == NULL)    return ERROR;  e = S->data;  p = S;  S = S->next;  delete p;  return OK;}//取栈顶元素int GetTop(LinkStack S){  if (S != NULL)  {    return S->data;  }}void print(LinkStack S){  while(S)  {    printf("%d->",S->data);    S=S->next;  }}int main(){  int j;  LinkStack s;  int e;  if (InitStack(s) == OK)    for (j = 1; j <= 12; j++)    {      Push(s, j);    }  printf("栈中的元素依次为:");  print(s);  printf("\n");    Pop(s, e);  printf("弹出的栈顶元素 e=%d\n", e);  printf("栈空否:%d(1:是 0:否)\n", StackEmpty(s));  e=GetTop(s);  printf("栈顶元素 e=%d 栈的长度为%d\n", e, StackLength(s));  ClearStack(s);  printf("清栈后,栈空否:%d(1:空 0:否)\n", StackEmpty(s));  DestroyStack(s);  print(s);  return 0;}