数据结构---栈和队列之顺序栈(C语言)

顺序栈的操作和数组差不多,代码比较简洁,完整代码在最下方。
在这个笔记里,只是顺序栈的最基本操作。

栈:栈是一种只能在 一端进行插入或删除操作的 线性表
栈是一种在操作上稍加限制的线性表,即 栈本质上是线性表,所以相应地也有顺序表和链式表,在栈里就是 顺序栈链式栈
其中,允许进行插入或删除的一端称为栈顶(Top)。栈顶由一个称为栈顶指针的位置指示器(其实就是一个变量,对于顺序栈,就是记录栈顶元素所在数组位置标号的一个整型变量;对于链式栈,就是记录栈顶元素所在结点地址的指针)来指示,它是动态变化的。表的另一端称为栈底,栈底是固定不变的。栈的插入和删除操作一般称为入栈和出栈。
栈的主要特点是 先进后出(FILO)
当n 个元素以某种顺序进栈,并且可以在任意时刻出栈(在满足先进后出的前提下)时,所获得的元素排列的数目N恰好满足函数Catalan()的计算,即 N=1/(n+1) * Cn 2n

----------------------------------------------------------------------------------------------------------------------------------

(1)顺序栈定义

typedef struct
{
	int data[maxSize];  //存放栈中元素
	int top;        //栈顶指针
}SqStack;

(2)入栈
进栈必须是先移动指针,再进入元素
int push() {  st.top = -1;   //初始化栈,只需将栈顶指针设置为-1  if (st.top ==maxSize - 1)   return 0;  printf("请输入入栈数据!按回车键停止输入!");  printf("\n请输入数据:");  while (1)  {   ++(st.top);   scanf_s("%d", &st.data[st.top]);   char c = getchar();   if (c == '\n')    break;  }  icount = st.top + 1;  printf("\n栈内数据为:");  for (int i = 0; i <icount; i++)   printf("%d  ", st.data[i]);
 return 1; }

(4)出栈
出栈必须先取出元素,再变动指针
int pop()
{
	int a[maxSize] = { 0 };
	if (st.top == -1)
		return 0;
	for (int i = 0; i <icount; i++)
	{
		a[i] = st.data[st.top];
		(st.top)--;

	}
	printf("\n出栈数据为:");
	for(int j=0;j<icount;j++)
		printf("%d  ", a[j]);
}

---------------------------------------------------------------------------------------------------------------------------------

完整代码:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
#define maxSize 100

/*****************顺序栈定义********************/
typedef struct
{
	int data[maxSize];  //存放栈中元素
	int top;        //栈顶指针
}SqStack;

SqStack st;
int icount;
/*********************进栈*********************/
int push()
{
	st.top = -1;   //初始化栈,只需将栈顶指针设置为-1
	if (st.top ==maxSize - 1)
		return 0;
	printf("请输入入栈数据!按回车键停止输入!");
	printf("\n请输入数据:");
	while (1)
	{
		++(st.top);
		scanf_s("%d", &st.data[st.top]);
		char c = getchar();
		if (c == '\n')
			break;
	}
	icount = st.top + 1;
	printf("\n栈内数据为:");
	for (int i = 0; i <icount; i++)
		printf("%d  ", st.data[i]);

	return 1;
}

/****************************出栈*************************/
int pop()
{
	int a[maxSize] = { 0 };
	if (st.top == -1)
		return 0;
	for (int i = 0; i <icount; i++)
	{
		a[i] = st.data[st.top];
		(st.top)--;

	}
	printf("\n出栈数据为:");
	for(int j=0;j<icount;j++)
		printf("%d  ", a[j]);
}
void main()
{
	push();
	pop();
	system("pause");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值