当前位置: 首页 > news >正文

考研c语言复习之栈

栈一般出选择题,队列选择题和大题都有

栈:只允许在一端 进行插入或删除操作的线性表即栈顶(top)

s.top=-1时栈为空

向栈中插入元素

s.top=s.top+1;s.data[s.top]=value; 这段代码可以用一行代码代替: s.data[++s.top]=value;

不懂i++和++i的有福了

++ i 是先加后赋值;i ++ 是先赋值后加;++i和i++都是分两步完成的

例题:当i=5时,s=(++i)+(++i)和s=(i++)+(i++)的值:

1、当i=5时,s=(++i)+(++i)=13 先算第一个(++i),++在前面,就把i先加1再把赋值,即先把i变为6然后再得出(++i)的值为6,这时i已经变为6了,

再计算第二个(++i),++在前面也是先把i加1后再赋值,不过这时的i已经为6了,第一步的时候把i变成6了的,然后加1的话就变成7了,所以第二个(++i)的值为7,s=(++i)+(++i)=6+7=13。

2、s=(i++)+(i++)=11 先算第一个(i++),i在前面,就先赋值再把i加1,即(i++)的值为5,i的值变为6,第二个(i++),i在前面,先赋值再把i加1,这个时候的i已经为6了,即(i++)的值为6,而i已经变为7了。所以s=(i++)+(i++)=5+6=11。

顺序存储实现栈

typedef struct {

Elemtype data[50];
int top;
}SqStack;

而出栈  则是 

S.data[top]=x;

s.top=s.top-1;   

 同样这两行代码等价于   S.data[S.top--];  即元素先出栈在移动

出栈,入栈, 获取栈顶元素代码如下

#include<iostream>
# define Maxsize 50 
typedef int Elemtype; 
using namespace std;
typedef struct {
	Elemtype data[Maxsize];
	int top;//始终指向栈顶 
}Sqstack;

void init(Sqstack &S)
{
	S.top=-1;//初始化栈 
}
bool StackEmpty(Sqstack S)
{
	if(S.top==-1)
	{
		return true;
	 } 
	 else
	 {
	 	return false;
	 }
}
bool Push(Sqstack &S,Elemtype data)
{
	//判断栈是否满
	if(S.top==Maxsize-1)
	{
		cout<<"stack if overflow"<<" "<<endl;
	 } 
	 else
	 {
	 	S.data[++S.top]=data;
	 	return true;
	 }
}

bool Gettop(Sqstack S,Elemtype &m)
{
	if(StackEmpty(S))
	{
		return false;
	}
	m=S.data[S.top];
	return true;
}
//出栈 
bool Pop(Sqstack &S,Elemtype &n)
{
	if(StackEmpty(S))
	{
		return false;
	 } 
	 else
	 {
	 	n=S.data[S.top--];//出栈 
	 	return true;
	 }
}

void print(Sqstack S)
{
	int i=0;
	for(i=0;i<=S.top;i++)
	{
		cout<<S.data[i]<<" ";
	}
	cout<<endl;
}
int main()
{
	Sqstack S;
	init(S);
	Elemtype m,n;
	bool flag,ret,ret2;
	Push(S,1);//栈底 
	Push(S,3);
	Push(S,6);
	Push(S,10);//栈顶 
	print(S);
	flag=StackEmpty(S);
	if(flag)
	{
		cout<<"stack is empty"<<endl;
	}
	ret=Gettop(S,m);
	if(ret)
	{
		cout<<"stack top is "<<m<<endl;
	}
	ret2=Pop(S,n);
	if(ret2)
	{
		cout<<"remove stack top is " << n<<" "<<endl;
	}
	ret=Gettop(S,m);
	if(ret)
	{
		cout<<"the new stack top is "<<m<<endl;
	}


	return 0; 
}

相关文章:

  • CMS网站模板定制设计与安全评估
  • 基于CAMEL 的Workforce 实现多智能体协同工作系统
  • Guava:Google开源的Java工具库,太强大了
  • ZCS的随机游走的题解
  • 用Llama 3微调私有知识库:本地部署避坑指南
  • 大屏技术汇集【目录】
  • CMake 函数和宏
  • 34-三数之和
  • 应用案例 | 核能工业:M-PM助力核工业科研项目
  • 华为网路设备学习-16 虚拟路由器冗余协议(VRRP)
  • vue设置自定义logo跟标题
  • 基于ISO 26262的汽车芯片认证流程解读
  • 使用PlotNeuralNet绘制ResNet50模型
  • 第十五次CCF-CSP认证(含C++源码)
  • VC6.0图文安装教程
  • NFT在艺术品市场的影响:面纵花魄还是一场夢?
  • 【读点论文】Chain Replication for Supporting High Throughput and Availability
  • PLY格式文件如何转换成3DTiles格式——使用GISBox软件实现高效转换
  • 【NPU 系列专栏 3.0 -- scale-out 和 scale-in 和 scale-up 和 scale-down
  • Vue学习汇总(JS长期更新版)
  • 数理+AI+工程,上海交大将开首届“笛卡尔班”招生约20名
  • 中国象棋协会坚决支持司法机关依法打击涉象棋行业的违法行为
  • 中国国家电影局与俄罗斯文化部签署电影合作文件
  • 上海乐高乐园度假区将于7月5日开园
  • 上海黄浦区拟73.2654亿元协议出让余庆里7宗组合地块
  • 溢价率19.48%,民企番禺置业3.07亿元竞得广州番禺融媒体中心北侧地块