数据结构-栈和队列

定义:一种只能在一端进行插入和删除操作的线性表。
特点:先进后出(Last In First Out,LIFO),第一个出栈的元素始终是栈顶元素。

  1. 栈的存储结构
    (1)顺序存储;
    (2)链式存储;

  2. 顺序存储结构的基本操作
    (1)顺序存储的结构定义:

    typedef struct{
    	int data[MAXSIZE]; //MAXSIZE是已定义的变量,用于限定栈满时的元素个数;
    	int top;//栈顶指针
    }SqStack;
    
  3. 初始化栈

    void  InitStack(SqStack &S){
    	S.top=-1;//栈顶元素设置为-1即可;
    }
    
  4. 栈的判空

    int IsEmpty(SqStack &S){
    if(S.top==-1)//只需判断栈顶指针是否等于-1;
    	return 1;
    else
    	return 0;
    }
    
  5. 入栈

    int Push(SqStack &S, int x){
    	if(S.top==S.MAXSIZE-1){
    		return 0;//入栈之前判断栈是否为满,为满则返回0;
    	++S.top;//不满,则栈顶指针+1;栈顶指针向上移;
    	S.data[S.top]=x;//将元素入栈,插入到栈顶指针所指向的数据单元;
    	return 1;
    	}
    
  6. 出栈

     int Pop(SqStack &S, int x){
    	if(S.top==-1)//出栈前先判断栈是否为空,为空则返回0;
    		return 0;
    	x=S.data[S.top];//出栈元素(必为栈顶元素)赋值与x;
    	--S.top;
    	return 1;
    }
    

队列

定义:一种插入操作在队尾,而删除操作在队头的线性表。
特点:先进先出(First In First Out,FIFO)。

  1. 队列的存储结构
    (1)顺序存储;
    (2)链式存储;

  2. 链式队列
    (1)链式队列的结构
    需要两个指针。分别为队头指针-front和队尾指针-rear。
    (2)链式队列的操作
    入队和出队相当于单链表的插入和删除(可以参考链式存储博客),只需要修改队头指针和队尾指针。
    入队时在队尾添加元素,需修改队尾指针;
    出队时在队头删除元素,需修改队头指针;

  3. 循环队列
    (1)循环队列的结构
    需要两个指针,分别为队头指针-front和队尾指针-rear;
    队头指针指向队头元素,队尾指针指向队尾元素的后一个位置;

    typedef struct{
    	int data[MAXSIZE];
    	int front;
    	int rear;
    }
    

(2)循环队列的三种状态
空循环队列、一般情况的循环队列、满循环循环队列;
在这里插入图片描述
(3)循环队列的空状态和满状态的判别
a.通常设置一个标志用来标记队列是空是满,例如,定义一个变量count,记录队列元素个素,count= = 0,队列为空,count= =MAXSIZE,队列为满;
b.rear= =front判断队列是否为空;(rear+1)%MAXSIZE= =front判断队列是否为满。
(注意:在队满时,实际上空出了一个元素的位置,因为rear是指向队尾的后一个位置)

  1. 循环队列的基本操作
    (1)初始化循环队列

    void InitQuence(SQuence &Q){
    	Q.front =Q.rear=0;//队头指针和队尾指针同时指向0位置,此时队列为空;
    }
    

(2)循环队列判断为空

	  int QuenceEmpty(SQuence &Q){
    	if(Q.front==Q.rear)
    		return 0;
    	else
    		return 1;
    	}

(3)入队

int EnQuence(SQence &Q,int x){
	if((Q.rear+1)%MAXSIZE==front){//入栈时,需判断队列是否为满,为满则不能入队;
		return 0;
	Q.data[Q.rear]=x;//队列为满,存入元素;
	Q.rear=(Q.rear+1)%MAXSIZE;//移动队尾指针;
	return 1;
}

(4)出队

int DeQuence(SQuence &Q,int x){
	if(Q.rear==Q.front)//出栈时,需判断队列是否为空,为空则不能出队
		return 0;
	x=Q.data[Q.front];  //不为空时,出队元素存x;
	Q.front=(Q.front+1)%MAXSIZE;//移动队头指针;
	return 1;
}
**项目名称:** 基于Vue.js与Spring Cloud架构的博客系统设计与开发——微服务分布式应用实践 **项目概述:** 本项目为计算机科学与技术专业本科毕业设计成果,旨在设计并实现一个采用前后端分离架构的现代化博客平台。系统前端基于Vue.js框架构建,提供响应式用户界面;后端采用Spring Cloud微服务架构,通过服务拆分、注册发现、配置中心及网关路由等技术,构建高可用、易扩展的分布式应用体系。项目重点探讨微服务模式下的系统设计、服务治理、数据一致性及部署运维等关键问题,体现了分布式系统在Web应用中的实践价值。 **技术架构:** 1. **前端技术:** Vue.js 2.x、Vue Router、Vuex、Element UI、Axios 2. **后端技术:** Spring Boot 2.x、Spring Cloud (Eureka/Nacos、Feign/OpenFeign、Ribbon、Hystrix、Zuul/Gateway、Config) 3. **数据存储:** MySQL 8.0(主数据存储)、Redis(缓存与会话管理) 4. **服务通信:** RESTful API、消息队列(可选RabbitMQ/Kafka) 5. **部署与运维:** Docker容器化、Jenkins持续集成、Nginx负载均衡 **核心功能模块:** - 用户管理:注册登录、权限控制、个人中心 - 文章管理:富文本编辑、分类标签、发布审核、评论互动 - 内容展示:首页推荐、分类检索、全文搜索、热门排行 - 系统管理:后台仪表盘、用户与内容监控、日志审计 - 微服务治理:服务健康检测、动态配置更新、熔断降级策略 **设计特点:** 1. **架构解耦:** 前后端完全分离,通过API网关统一接入,支持独立开发与部署。 2. **服务拆分:** 按业务域划分为用户服务、文章服务、评论服务、文件服务等独立微服务。 3. **高可用设计:** 采用服务注册发现机制,配合负载均衡与熔断器,提升系统容错能力。 4. **可扩展性:** 模块化设计支持横向扩展,配置中心实现运行时动态调整。 **项目成果:** 完成了一个具备完整博客功能、具备微服务典型特征的分布式系统原型,通过容器化部署验证了多服务协同运行的可行性,为云原生应用开发提供了实践参考。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值