数据结构 栈 入栈 遍历输出

数据结构 栈 入栈 遍历输出

#include<bits/stdc++.h>
/*
#include<iostream>
#include<>
*/
using namespace std;
//pA->p(Next)=pB->p(top)含义是pA指向pB
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);//不用返回值,不存在满,一定会成功 
void traverse(PSTACK);//不用返回值,遍历把栈s发就行

//返回类型是什么,要是函数里面有输出,不用int,函数会有成功失败用bool 


int main()
{
	int val;
	STACK S; 
	// 先造一个空栈 
	init(&S);//必须写s的地址,不然不能改变 
	push(&S,1);//入栈 
	push(&S,2);
	push(&S,3);
	traverse(&S);

	return 0;
} 



void init(PSTACK ps)//这是指针即地址 
{
	//为什么结构体可以指向结构体内部成员:ps形参的数类型是PSACK栈指针 
	//造出一个点,把地址给pTop指针 即pS栈的pTop指向新的点 
	ps->pTop = (PNODE)malloc(sizeof(NODE));
	if( NULL==ps->pTop)
	{
		cout<<"动态内存分配失败"<<endl;
		exit(-1); //直接终止 
	}
	else
	{
		//顶底指向了同一个头节点,这个头节点指针域是空 
		ps->pBottom=ps->pTop;//顺序不能反,底指向顶,即底也指向新的点 
		ps->pBottom->pNext =NULL;//ps所指向的pBtoom成员指向的指针域是空的 
	} 
	
	ps->pBottom;
	
}

void push(PSTACK pS,int val)
{
	//先注意1pS是栈2pNew是新点的指针地址3指针域是->pNext
	//pA->p(Next)=pB->p(top)含义是pA指向pB 
	//入栈,先造一个点
	PNODE pNew=(PNODE)malloc(sizeof(NODE)); 
	pNew->data=val;//值存入新点 
	pNew->pNext=pS->pTop;//新点的指针域 指向未插入节点前 pS栈的顶,这里只能是top
	pS->pTop=pNew; //pS栈的top指针指向新的点 
	
	return;
}

void traverse(PSTACK pS)
{
	//先定义一个指针p 
	PNODE p= pS->pTop;
	
	while ( p!=pS->pBottom 	)
	{
		cout<<p->data<<endl;
		p=p->pNext;//p后移 
	}
	return;
}

 

结果

在这里插入图片描述

如果对你有帮助,请 点赞 支持一下 谢谢

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值