栈的创建入栈遍历_郝斌数据结构_个人注释

本文介绍了一种使用链表实现栈的方法,并提供了详细的C语言代码示例。通过定义节点结构体和栈结构体,实现了栈的基本操作如初始化、压栈及遍历等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目前我个人在数据结构的学习中,在课外主要学习郝斌老师的数据结构, 借此博文分享我的注释与拙劣的见解

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#define MaxSize 100

typedef struct node
{
	int data;
	struct node *next;
}NODE,*PNODE;//定义一个栈结点 里面有数据域data和指针域next
			 //链表方式建立 

typedef struct stack
{
	PNODE top;
	PNODE bottom;
}STACK,*PSTACK;//定义一个结点里面有栈顶指针和栈底指针
			   //把这两个指针绑在一个结点中 
 

void init(PSTACK);
void push(PSTACK,int);
int traverse(PSTACK);
 
int main()
{
	STACK S;//STACK S等价于 typedef struct stack S
			//定义了一个包含栈顶栈底指针的结点S 
	init(&S);//要改变这个结点里面的值 就得发送他的地址 
			//所以声明函数中是PSTACK专门指向STACK类型结点的指针类型 
	push(&S,1);
	push(&S,2);
	traverse(&S);
	 
	return 0;
}

void init(PSTACK ps)//初始化,创建栈
					//把S的地址发送给ps了 ps指向了S保存了S的地址 
{
	ps->top=(PNODE)malloc(sizeof(NODE));//给栈指针结点中的栈顶指针top指向动态的分配内存 
	if(ps->top==NULL)
	{
		printf("分配失败!\n");
		exit(-1);
	}
	ps->bottom=ps->top;//让栈指针结点中的栈底指针bottom指向(top指向的动态分配的内存) 
	ps->top->next=NULL;//把top指向的结点的指针域清空 
}

void push(PSTACK ps,int val)//压栈即入栈 
{
	PNODE pnew=(PNODE)malloc(sizeof(NODE));//搞一个(链表类型的)指针pnew指向动态分配的内存 
	pnew->data =val;	//把临时变量的值赋给新结点的数据域里面 
	pnew->next =ps->top;//让栈顶指针当时指向的地址(即前面一个结点的地址)赋给新结点的指针域
						//也就是把新结点的指针域指向栈顶指向的最后一个结点
						//顺利的把新结点挂到栈的顶部 
	ps->top=pnew; 		//让栈顶指针指向刚刚压入栈的栈结点 
	
}

int traverse(PSTACK pS)
{
	PNODE p=pS->top ;//搞一个指针p让他指向和top一样的栈结点
					//然后把p从栈顶往栈底方向移动 移动到了就读取栈结点的数据域 
	while(p!=pS->bottom )//当p没有移动到栈底的时候 
	{
		printf("%d",p->data );//打印栈结点的值 
		p=p->next;//把p往下移动 
	}
}

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值