栈的构造

来源:互联网 发布:淘宝现在做什么赚钱 编辑:程序博客网 时间:2024/06/06 09:28

郝斌老师---

/*  了解栈的构造方法 */  #include <stdio.h>  #include <malloc.h>  #include <stdlib.h>    typedef struct Node  {      int data;      struct Node * pNext;  }NODE, * PNODE;  typedef struct Stack  {      PNODE pTop;      PNODE pBottom;  }STACK, * PSTACK;    void init(PSTACK);             //初始化栈  void push(PSTACK, int);        //压栈  bool empty(PSTACK);            //判断栈是否为空  void traverse(PSTACK);         //遍历栈  void pop(PSTACK,int *);        //出栈  void clear(PSTACK);            //清空栈    int main()  {      STACK S;      int val;      /*测试初始化栈及压栈函数*/      init(&S);      push(&S, 1);      push(&S, 2);      push(&S, 3);      push(&S, 4);      push(&S, 5);      traverse(&S);     /*测试出栈*/      pop(&S,&val); printf("被删除的栈的数据域为:%d\n", val);    traverse(&S);      /*测试清空栈*/      clear(&S); printf("清栈后:");    traverse(&S);      return 0;  }    /*初始化栈——使pTop和pBottom指向同一节点*/  void init(PSTACK pS)  {      pS->pBottom = (PNODE)malloc(sizeof(NODE));      if (pS->pBottom == NULL)      {          printf("动态内存分配失败!\n");          exit(-1);      }      pS->pBottom->pNext = NULL;      pS->pTop = pS->pBottom;      return;  }  /*压栈——创建一个新节点,连到定节点上面,把新节点标记为顶节点*/  void push(PSTACK pS, int val)  {      PNODE pNew;      pNew = (PNODE)malloc(sizeof(NODE));      if (NULL == pNew)      {          printf("动态内存分配失败!\n");          exit(-1);      }      pNew->data = val;      pNew->pNext = pS->pTop;      pS->pTop = pNew;      return;  }  /*判断栈是否为空*/  bool empty(PSTACK pS)  {      if (pS->pTop == pS->pBottom)          return true;      else          return false;  }  /*遍历栈——定义临时变量temp,从pTop开始一直往下指*/  void traverse(PSTACK pS)  {      if (empty(pS))          printf("栈为空 !\n");      else      {          PNODE temp;          temp = pS->pTop;          printf("遍历栈:");          while (temp != pS->pBottom)          {              printf("%d ", temp->data);              temp = temp->pNext;          }          printf("\n");      }      return;  }  /*出栈—— pTop下移,且把原pTop占用的空间释放,并把出栈元素保存到pVal*/  void pop(PSTACK pS,int *pVal)  {      if (empty(pS))          printf("栈为空!\n");      else      {          PNODE temp = pS->pTop; *pVal=temp->data;        pS->pTop = temp->pNext;            free(temp);  temp=NULL;    }      return;  }  /*清空栈——类似出栈*/  void clear(PSTACK pS)  {      if (empty(pS))          printf("栈为空!\n");      else          while (pS->pTop != pS->pBottom)          {              PNODE temp = pS->pTop;              pS->pTop = temp->pNext;//pS->pTop = pS->pTop->pNext;              free(temp);          }      return;  }  


0 0
原创粉丝点击