栈的入栈/出栈操作

来源:互联网 发布:黑道圣徒4捏脸数据 编辑:程序博客网 时间:2024/04/30 23:21
//...........................编程实现栈的入栈/出栈操作  (先进后出)/*栈 ---只允许在表的末端进行插入和删除的线性表    允许插入和删除的一端叫做栈顶   不允许插入和删除的一端叫做栈底 */#if 0 #include<iostream>#include<stdio.h>#include<string.h>#include<conio.h>using namespace std;typedef struct student{ int data; struct student *next;}node;typedef struct stackqueue{ node *zhandi,*top;}queue;//创建空栈queue *CreateStack(){ queue *q; q = (queue*)malloc(sizeof(queue)); q->zhandi = NULL; q->top= NULL; //分别将栈顶和栈底指针置空 return q;}//入栈queue *push(queue *HQ,int x){ node *s,*p; s = (node*)malloc(sizeof(node)); s->data = x; s->next = NULL; if(HQ->zhandi == NULL) //如果栈为空 则新节点即是栈顶也是栈底 {  HQ->zhandi = s;  HQ->top = s; } else  //如果栈不为空,新节点放在栈顶,栈顶指针指向新节点 {  HQ->top ->next = s; //栈顶节点的指针指向新节点  HQ->top = s; //栈顶指针指向新节点 } return (HQ);}//出栈  --从栈顶一端删除节点queue  *pop(queue *HQ){  node *p;  int x;  if(HQ->zhandi == NULL)  cout<<"Empty stack!\n";  else  {   x = HQ->zhandi ->data ;   p = HQ->zhandi ;   if(HQ->zhandi ==HQ->top )  //将栈置空   {    HQ->zhandi = NULL;    HQ->top = NULL;   }   else   {    while(p->next !=HQ->top )  //循环遍历找到栈顶元素出队    {     p = p->next ;    }    HQ->top = p;    HQ->top ->next =NULL;   }   return (HQ);  }}//栈的打印void Print(queue *HQ){ node *s = HQ->zhandi ; if(s == NULL)  //如果队列为空,直接返回 {  cout<<"Empty stack!\n";     return ; } while(s != NULL) {  cout<<s->data<<" ";  s=s->next ; } cout<<endl;}int main(){ queue *p =NULL; p =CreateStack(); p =push(p,2);  //将元素入栈 p =push(p,3); p =push(p,4); p =push(p,5); p =push(p,1); p =push(p,9); Print(p); p = pop(p);//将元素出栈 p =  pop(p); Print(p); delete []p; return 0;}#endif
阅读全文
0 0
原创粉丝点击