c语言实现顺序栈


前言

      有言:学而不练,练而不坚。对于知识,我们都应该学有所练,练有所用。所以我又来啦!今天给大家分享的是顺序栈,希望这篇博客对大家有帮助和参考价值。新CSDNER,不当之处还望指正。

一、顺序栈是什么?

            顺序栈是栈的顺序实现。顺序栈是指利用顺序存储结构实现的栈。采用地址连续的存储空间(数组)依次存储栈中数据元素,由于入栈和出栈运算都是在栈顶进行,而栈底位置是固定不变的,可以将栈底位置设置在数组空间的起始处;栈顶位置是随入栈和出栈操作而变化的,故需用一个整型变量top来记录当前栈顶元素在数组中的位置。

二、顺序栈的基本操作代码实例

1、头文件准备(定义数组、下标)

#include<stdio.h>
#include<stdlib.h> 
#define Stack_Size 50

//顺序表存储
typedef struct
{
	//定义数组存放数据
	int data[Stack_Size];
	// top用于存放下标
	int top; 
 }SqStack;

2、栈的初始化

//栈的初始化
 bool InitStack(SqStack &s) 
 {
 	//top=-1时,为空 
 	s.top=-1;
 	return true;
 }

3、判断表空、表满

 s) 
 {
 	if(s.top==-1)
 		return true;
	else
	    return false;
 }
 
 //判断是否为满 
 bool isFullStack(SqStack s)
 {
 	if(s.top==Stack_Size-1)
 	    return true;
 	else
 	    return false;
  } 

4、进栈、出栈

(对于不同的字符进栈需要改变变量的定义,该代码以int输入,若为字符可改char)

//进栈
bool Push(SqStack &s,int x) 
{
	//栈满 
	if(isFullStack(s)==1)
	    return false;
	else
	{
		//修改栈顶指针 
        s.top++; 
	    //x进栈
	    s.data[s.top]=x;
        return true; 
	}
}

//出栈
bool Pop(SqStack &s,int &x) 
{
	//栈为空 
	if(isEmpyStack(s)==1)
	    return false;
	else
	{
		//栈顶元素赋给x 
		x=s.data[s.top];
	    //修改栈顶指针 
        s.top--; 
        return true; 
	}
}

5、读取栈顶元素

//读取栈顶元素
bool GetTop(SqStack &s,int &x)
{
	//栈为空 
	if(isEmpyStack(s)==1)
	    return false;
	else
	{
	    //栈顶元素赋给x 
    	x=s.data[s.top];
    	return true;
    }	
 } 

6、求顺序表的表长

//求顺序栈的长度(栈内的元素个数)
int LengthStack(SqStack s)
{
	return(s.top+1);
}

7、清空栈

//清空栈
void ClearStack(SqStack &s) 
{
	s.top=-1;
	printf("栈已清空\n");
}

8、打印顺序栈

//打印栈
void printStack(SqStack s)
{
	int i,x;
	for(i=LengthStack(s);i>0;i--)
	{
		Pop(s,x);
		printf("%2d",x);
	}
	printf("\n");
 } 

9、主函数

#include<stdio.h>
#include<stdlib.h> 
#define Stack_Size 50

//顺序表存储
typedef struct
{
	//定义数组存放数据
	int data[Stack_Size];
	// top用于存放下标
	int top; 
 }SqStack;
 
 //栈的初始化
 bool InitStack(SqStack &s) 
 {
 	//top=-1时,为空 
 	s.top=-1;
 	return true;
 }
 
 //判断是否为空
 bool isEmpyStack(SqStack s) 
 {
 	if(s.top==-1)
 		return true;
	else
	    return false;
 }
 
 //判断是否为满 
 bool isFullStack(SqStack s)
 {
 	if(s.top==Stack_Size-1)
 	    return true;
 	else
 	    return false;
  } 

//进栈
bool Push(SqStack &s,int x) 
{
	//栈满 
	if(isFullStack(s)==1)
	    return false;
	else
	{
		//修改栈顶指针 
        s.top++; 
	    //x进栈
	    s.data[s.top]=x;
        return true; 
	}
}

//出栈
bool Pop(SqStack &s,int &x) 
{
	//栈为空 
	if(isEmpyStack(s)==1)
	    return false;
	else
	{
		//栈顶元素赋给x 
		x=s.data[s.top];
	    //修改栈顶指针 
        s.top--; 
        return true; 
	}
}

//读取栈顶元素
bool GetTop(SqStack &s,int &x)
{
	//栈为空 
	if(isEmpyStack(s)==1)
	    return false;
	else
	{
	    //栈顶元素赋给x 
    	x=s.data[s.top];
    	return true;
    }	
 } 

//求顺序栈的长度(栈内的元素个数)
int LengthStack(SqStack s)
{
	return(s.top+1);
}

//清空栈
void ClearStack(SqStack &s) 
{
	s.top=-1;
	printf("栈已清空\n");
}

//打印栈
void printStack(SqStack s)
{
	int i,x;
	for(i=LengthStack(s);i>0;i--)
	{
		Pop(s,x);
		printf("%2d",x);
	}
	printf("\n");
 } 

int main()
{
	SqStack s;
	InitStack(s);
	int x,y;
	//元素进栈
	printf("请输入需要进栈的元素(999结束):\n");
	scanf("%d",&x);
	while(x!=999)
	{
		Push(s,x);
		scanf("%d",&x);
	}
	//判断是否为空 
	if(isEmpyStack(s)==1)
	    printf("该栈为空\n");
	else
	    printf("该栈不为空\n");
	//判断是否已满 
	if(isFullStack(s)==1)
	    printf("该栈已满\n");
	else
	    printf("该栈未满\n"); 
	//顺序栈的长度
	LengthStack(s);
	printf("顺序栈的长度为:%d\n",LengthStack(s));
	//栈顶元素
	GetTop(s,y);
	printf("栈顶元素是:%d\n",y);
	//元素出栈
	Pop(s,x);
	printf("出栈的元素为:%d\n",x);
	//打印 
	printf("此时栈中的元素为:\n");
	printStack(s);
	ClearStack(s);
}

运行结果


 

总结

          该代码运用的数组知识,布尔型、if语句等。目前该程序已实现这些基本操作,并进行的测试。后续如有更多操作,会继续更新。

  • 27
    点赞
  • 144
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zero.zwt

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值