//...........................编程实现栈的入栈/出栈操作 (先进后出)
/*
栈 ---只允许在表的末端进行插入和删除的线性表
允许插入和删除的一端叫做栈顶 不允许插入和删除的一端叫做栈底
*/
#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
栈的入栈/出栈操作
最新推荐文章于 2024-03-08 02:00:45 发布