栈的学习笔记(新的单元)

写在前面———

进入到了一个新的章节了,这次学习的内容是“栈”。老规矩,先来一段定义(搬运自百度)

     ""

    栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。 

                                                                                                                ""

图示:

所以可以看出,栈本质上就是一个顺序表,甚至某些功能可能还没有单纯的顺序表完善。那我们在已经学习了众多功能强大的线性表之后,为什么还要倒退回去学一个不完整版的顺序表呢?它又有哪些精彩的运用呢?敬请期待下两篇博客——“栈的运用之括号匹配”,“栈的应用之简单的计算器”。这里先对栈的简单功能进行实现。

代码实现如下:(其实跟顺序表几乎一毛一样,就不细说了)

    1.定义结构体(这步,应该不用细说了吧,哈哈)

typedef struct zhan{
     int top;
     int data[max_size];
}*zhanptr;                            //of typedf 

2.定义显示函数

void outputzhan(zhanptr paraptr)
{
	int i;
	for(i=0;i<paraptr->top;i++)
	{
		printf("%c ",paraptr->data[i]);
	}
	printf("\r\n");
}      //of output function

3.初始化

zhanptr initzhan()
{
	zhanptr tempptr=(zhanptr)malloc(sizeof(zhan));
	tempptr->top=-1;
	return tempptr;
}      //of init function

4.定义“压入”函数

  

void pushzhan(int paravalue,zhanptr paraptr)
{
	if(paraptr->top >=max_size-1)
	{
		printf("can not do the action!\n");
	}
	paraptr->top++;
	paraptr->data[paraptr->top]=paravalue;
}  //of push fuction

5.定义“弹出”函数

char popzhan(zhanptr paraptr)
{
	if(paraptr->top<0)
	{
		printf("can not do this action!\n");
	}
	paraptr->top--;
	return paraptr->data[paraptr->top+1];
}    //of pop fucton

6.测试函数

    

void pushPopTest() {
    printf("---- pushPopTest begins. ----\r\n");

	// Initialize.
    zhanptr tempStack = initzhan();
    printf("After initialization, the stack is: ");
	outputzhan(tempStack);

	// Pop.
	char ch;
	for ( ch = 'a'; ch < 'm'; ch ++) {
		printf("Pushing %c.\r\n", ch);
		pushzhan(ch,tempStack);
		outputzhan(tempStack);
	}//Of for i

	// Pop.
	int i;
	for ( i = 0; i < 3; i ++) {
		ch = popzhan(tempStack);
		printf("Pop %c.\r\n", ch);
		outputzhan(tempStack);
	}//Of for i

    printf("---- pushPopTest ends. ----\r\n");
}

7.完整版伪代码

    (不含main函数)

#include<stdio.h>
#include<malloc.h>
#define max_size  10

typedef struct zhan{
     int top;
     int data[max_size];
}*zhanptr;                            //of typedf 

void outputzhan(zhanptr paraptr)
{
	int i;
	for(i=0;i<paraptr->top;i++)
	{
		printf("%c ",paraptr->data[i]);
	}
	printf("\r\n");
}      //of output function

zhanptr initzhan()
{
	zhanptr tempptr=(zhanptr)malloc(sizeof(zhan));
	tempptr->top=-1;
	return tempptr;
}      //of init function


void pushzhan(int paravalue,zhanptr paraptr)
{
	if(paraptr->top >=max_size-1)
	{
		printf("can not do the action!\n");
	}
	paraptr->top++;
	paraptr->data[paraptr->top]=paravalue;
}  //of push fuction

char popzhan(zhanptr paraptr)
{
	if(paraptr->top<0)
	{
		printf("can not do this action!\n");
	}
	paraptr->top--;
	return paraptr->data[paraptr->top+1];
}    //of pop fucton


void pushPopTest() {
    printf("---- pushPopTest begins. ----\r\n");

	// Initialize.
    zhanptr tempStack = initzhan();
    printf("After initialization, the stack is: ");
	outputzhan(tempStack);

	// Pop.
	char ch;
	for ( ch = 'a'; ch < 'm'; ch ++) {
		printf("Pushing %c.\r\n", ch);
		pushzhan(ch,tempStack);
		outputzhan(tempStack);
	}//Of for i

	// Pop.
	int i;
	for ( i = 0; i < 3; i ++) {
		ch = popzhan(tempStack);
		printf("Pop %c.\r\n", ch);
		outputzhan(tempStack);
	}//Of for i

    printf("---- pushPopTest ends. ----\r\n");
}

一些感悟:

      单看这一章,是万万不可能体会到栈的强大功能的,甚至还会让人疑惑,为什么要倒退回去,学一个比较“落后”的东西。然而,当运用好它了过后,将体会到栈的引入对我们有多么大的帮助!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值