数据结构——顺序栈

目录

一、栈的定义和示意图

        1.栈的定义

栈(stack)又名堆栈,它是一种运算受限的线性表,要严格遵循先进后出的原理。

         2.栈的示意图

二、顺序栈的定义和初始化

        1.顺序栈的定义

顺序栈被定义为一个结构体类型,其中Datatype为栈元素的数据类型,data为一个一维数组,用于存储栈中的数据元素,top用于几率栈顶所在的位置。

        2.顺序栈的初始化

初始化操作既创建一个空栈,把栈顶指针设为-1即可。

三、判断栈空和栈满

        1.判断栈是否为空

         2.判断栈是否已满

判断栈空和栈满都是用栈顶指针top来判断,若top为-1则栈空,若top为MAX-1既为栈满(MAX为给定的顺序栈存储空间的总分配量)。

四、顺序栈的进栈和出栈

        1.顺序栈的进栈

入栈要先判断栈是否已满,若没满则先将top指针+1,再将数据放入栈顶位置上。 

        2.顺序栈的出栈

出栈要先判断栈是否已满,若没满则先将栈顶数据带出,再使top指针-1;

注:出栈只是栈顶指针改变,元素还在数组内。

五、顺序栈的创建和出栈并输出

        在了解了上面的内容后就可以进行栈的相关操作,入栈的创建和出栈并输出栈的元素。

        1.顺序栈的创建

栈的创建要先初始化栈,再通过进栈函数输入所需的数据。

        2.顺序栈的出栈并输出栈中元素

用一个变量接受出栈函数带出的数据,并循环直到栈为空为止。

六、代码总览和运行结果


一、栈的定义和示意图

        1.栈的定义

栈(stack)又名堆栈,它是一种运算受限的线性表,要严格遵循先进后出的原理。

         2.栈的示意图


二、顺序栈的定义和初始化

        1.顺序栈的定义

typedef struct
{
	DataType data[MAX];        //顺序栈的存储类型
	int top;                   //记录栈顶的指针,在顺序栈中类似于数组下标
}Seqstack;

顺序栈被定义为一个结构体类型,其中Datatype为栈元素的数据类型,data为一个一维数组,用于存储栈中的数据元素,top用于几率栈顶所在的位置。

        2.顺序栈的初始化

//栈的初始化
void InitStack(Seqstack* s)
{
	s->top = -1;      //初始化栈顶指针为-1
}

初始化操作既创建一个空栈,把栈顶指针设为-1即可。


三、判断栈空和栈满

        1.判断栈是否为空

//判断栈是否为空
int EmptyStack(Seqstack* s)
{
	if (s->top == -1)
		return 1;            //若空返回1,非空返回0
	else
		return 0;
}

         2.判断栈是否已满

//判断栈是否已满
int FullStack(Seqstack* s)
{
	if(s->top==MAX-1)
		return 1;            //若满返回1,非空返回0
	else
		return 0;
}

判断栈空和栈满都是用栈顶指针top来判断,若top为-1则栈空,若top为MAX-1既为栈满(MAX为给定的顺序栈存储空间的总分配量)。


四、顺序栈的进栈和出栈

        1.顺序栈的进栈

//入栈
int Push(Seqstack* s,DataType x)
{
	if (FullStack(s))           //调用函数判断栈是否已满
	{
		printf("栈满,不可入栈!");
		return 0;
	}
	else
	{
		s->top++;                //将栈顶指针上一位
		s->data[s->top] = x;    
		return 1;
	}
}

入栈要先判断栈是否已满,若没满则先将top指针+1,再将数据放入栈顶位置上。 

        2.顺序栈的出栈

//出栈
int Pop(Seqstack* s,DataType *x)
{
	if (EmptyStack(s))
	{
		return 0;
	}
	else
	{
		*x = s->data[s->top];
		s->top--;
		return 1;
	}
}

出栈要先判断栈是否已满,若没满则先将栈顶数据带出,再使top指针-1;

注:出栈只是栈顶指针改变,元素还在数组内。


五、顺序栈的创建和出栈并输出

        在了解了上面的内容后就可以进行栈的相关操作,入栈的创建和出栈并输出栈的元素。

        1.顺序栈的创建

//创建栈
int CreateStack(Seqstack* s)
{
	DataType e;
	InitStack(s);   //初始化栈
	printf("intput data:(输入a停止)\n");
	while (scanf("%d", &e))     //循环输入数据并入
		Push(s, e);
	return 1;
}

栈的创建要先初始化栈,再通过进栈函数输入所需的数据。

        2.顺序栈的出栈并输出栈中元素

void printStack(Seqstack* s)
{
	DataType e;
	while (Pop(s, &e))      
		printf("%d ", e);
}

用一个变量接受出栈函数带出的数据,并循环直到栈为空为止。


六、代码总览和运行结果

#define  _CRT_SECURE_NO_WARNINGS 1
#define MAX 10
#include <stdio.h>
//定义数据类型
typedef  int   DataType;
//栈的定义
typedef struct
{
	DataType data[MAX];        //顺序栈的存储类型
	int top;                   //记录栈顶的指针,在顺序栈中类似于数组下标
}Seqstack;

//栈的初始化
void InitStack(Seqstack* s)
{
	s->top = -1;      //初始化栈顶指针为-1
}
//判断栈是否为空
int EmptyStack(Seqstack* s)
{
	if (s->top == -1)
		return 1;            //若空返回1,非空返回0
	else
		return 0;
}
//判断栈是否已满
int FullStack(Seqstack* s)
{
	if(s->top==MAX-1)
		return 1;            //若满返回1,非空返回0
	else
		return 0;
}

//入栈
int Push(Seqstack* s,DataType x)
{
	if (FullStack(s))           //调用函数判断栈是否已满
	{
		printf("栈满,不可入栈!");
		return 0;
	}
	else
	{
		s->top++;                //将栈顶指针上一位
		s->data[s->top] = x;    
		return 1;
	}
}


//出栈
int Pop(Seqstack* s,DataType *x)
{
	if (EmptyStack(s))
	{
		return 0;
	}
	else
	{
		*x = s->data[s->top];
		s->top--;
		return 1;
	}
}

//创建栈
int CreateStack(Seqstack* s)
{
	DataType e;
	InitStack(s);   //初始化栈
	printf("intput data:(输入a停止)\n");
	while (scanf("%d", &e))     //循环输入数据并入
		Push(s, e);
	return 1;
}

//出栈并输出栈中元素
void printStack(Seqstack* s)
{
	DataType e;
	while (Pop(s, &e))      
		printf("%d ", e);
}

int main()
{
	Seqstack ss;
	printf("开始创建栈:\n");
	CreateStack(&ss);
	printf("开始出栈并输出栈中元素:\n");
	printStack(&ss);
	return 0;
}

 


 

  • 20
    点赞
  • 97
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
C语言中的数据结构顺序栈是一种使用数组来实现的栈结构。顺序栈的特点是先进后出,即最后进入的元素最先出栈。顺序栈可以通过数组的下标来实现元素的进栈和出栈操作。 在C语言中,可以通过定义一个数组和一个栈顶指针来实现顺序栈。栈顶指针指向栈中最后一个元素的位置。当栈为空时,栈顶指针指向-1。 以下是一种实现顺序栈的代码示例: ```c #define MAX_SIZE 100 // 定义栈的最大容量 typedef struct { int data[MAX_SIZE]; // 用数组存储栈元素 int top; // 栈顶指针 } SeqStack; void InitStack(SeqStack *s) { s->top = -1; // 初始化栈顶指针为-1,表示栈为空 } int IsEmpty(SeqStack *s) { return s->top == -1; // 判断栈是否为空 } int IsFull(SeqStack *s) { return s->top == MAX_SIZE - 1; // 判断栈是否已满 } void Push(SeqStack *s, int element) { if (IsFull(s)) { printf("Stack is full.\n"); // 栈已满,无法继续入栈 return; } s->top++; // 栈顶指针加1 s->data[s->top = element; // 元素入栈 } int Pop(SeqStack *s) { if (IsEmpty(s)) { printf("Stack is empty.\n"); // 栈为空,无法进行出栈操作 return -1; } int element = s->data[s->top]; // 获取栈顶元素 s->top--; // 栈顶指针减1 return element; } int GetTop(SeqStack *s) { if (IsEmpty(s)) { printf("Stack is empty.\n"); // 栈为空,无法获取栈顶元素 return -1; } return s->data[s->top]; // 返回栈顶元素 } ``` 以上是一个简单的C语言实现顺序栈的代码示例。通过调用相应的函数,可以实现顺序栈的初始化、判断栈是否为空、判断栈是否已满、元素入栈、元素出栈、获取栈顶元素等操作。需要注意的是,在使用顺序栈时,需要注意栈的容量是否足够,以避免栈溢出的情况发生。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值