首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

栈的基本操作算法兑现(C语言)

2012-10-30 
栈的基本操作算法实现(C语言)#include stdio.h#include malloc.h#include stdlib.h//栈中元素的节点

栈的基本操作算法实现(C语言)

#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 pop(PSTACK ,int *);//出栈void traverse(PSTACK);//遍历栈void clear(PSTACK ps);//清空栈int main(void){   STACK s;   int val;   init(&s);   push(&s,1);    push(&s,2);    push(&s,3);    traverse(&s);   pop(&s,&val);   printf("%d\n",val);   traverse(&s);}//初始化栈void init(PSTACK ps){  ps->pTop=(PNODE)malloc(sizeof(NODE));  if(ps->pTop==NULL)  {  printf("动态内存分配失败");  exit(-1);  }  ps->pBottom=ps->pTop;  ps->pBottom->pNext=NULL;}//压栈void push(PSTACK ps,int val){  PNODE p=(PNODE)malloc(sizeof(NODE));  p->data=val;  p->pNext=ps->pTop;  ps->pTop=p;  return ;}//遍历栈void traverse(PSTACK ps){PNODE p=ps->pTop;   while(p!=ps->pBottom)   {     printf("%d  ",p->data); p=p->pNext;   }   printf("\n");   return;}//出栈,不需要返回值,因为直接操作存数据的变量的地址bool pop(PSTACK ps ,int * val){  if(ps->pBottom!=ps->pTop)  {     PNODE p=ps->pTop; *val =p->data; ps->pTop=p->pNext; free(p); p=NULL; return true;  }  else  return false;}//清空栈void clear(PSTACK ps){//定义一个临时指针q  PNODE p=ps->pTop , q=NULL;    while(p!=ps->pBottom)  {     q=p->pNext; free(p); p=q;      }  ps->pTop=ps->pBottom;}
?

热点排行