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

西安门户网站免费创建网站

西安门户网站,免费创建网站,工信部外国网站备案,多行业品牌企业公司网站模板栈与队列是数据结构中重要的结构, 可以用于解决一些题目 模拟实现时可以增加对于这些结构的理解,也可以巩固我们的语言水平,解决某些题目也会有很好的效果 话不多说 目录 栈的实现结构体的定义:初始化栈:压栈:出栈&am…

栈与队列是数据结构中重要的结构,
可以用于解决一些题目
模拟实现时可以增加对于这些结构的理解,也可以巩固我们的语言水平,解决某些题目也会有很好的效果

话不多说

目录

  • 栈的实现
    • 结构体的定义:
    • 初始化栈:
    • 压栈:
    • 出栈:
    • 获取栈顶元素:
    • 获取栈中有效元素个数 :
    • 检测栈是否为空:
    • 销毁栈 :
  • 栈模拟源代码:
  • 队列的实现:

栈的实现

先来看一下栈的定义:

栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端
称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。
压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。
出栈:栈的删除操作叫做出栈。出数据也在栈顶。

在这里插入图片描述

栈的实现一般可以使用数组或者链表实现,
相对而言数组的结构实现更优一些。因为数组在尾上插入数据的代价比较小。

结构体的定义:

// 支持动态增长的栈
typedef int STDataType;
typedef struct Stack
{STDataType* a;int top;		// 栈顶int capacity;  // 容量 
}Stack;

初始化栈:

栈在初始化时,
我们可以定义top为栈顶元素的下一个,故这样我们就可以将top定义为0,若将top定义为栈顶元素,则需要将top定义为-1

这里我在仔细的讲解一下:
top0时,我们不能将top视作栈顶元素,因为如果压栈,压入的元素就会在top == 0的位置压入,压入的top仍为0,我们将判断不了top == 0时是否有元素,
则若top = 0,我们应当定义栈顶元素的下一个,这样我们赋值时:ps->a[top] = data;top++;

同理,若是初始化top == -1,则赋值:top++;ps->a[top] = data;

// 初始化栈 
void StackInit(Stack* ps)
{ps->a = NULL;ps->capacity = 0;ps->top = 0;
}

压栈:

因为只有压栈时会增加元素个数,故我们不需要封装一个函数用来创造新节点

void StackPush(Stack* ps, STDataType data)
{assert(ps);//检查容量if (ps->capacity == ps->top){int newcapacity = (ps->capacity == 0 ? 4 : 2 * ps->capacity);STDataType* tmp = (STDataType*)realloc(ps->a, sizeof(STDataType) * newcapacity);if (tmp == NULL){perror("realloc fail");return;}ps->a = tmp;ps->capacity = newcapacity;}ps->a[ps->top] = data;ps->top++;
}

出栈:

void StackPop(Stack* ps)
{assert(ps);assert(ps->top);ps->top--;
}

获取栈顶元素:

STDataType StackTop(Stack* ps)
{assert(ps);return ps->a[ps->top - 1];
}

获取栈中有效元素个数 :

int StackSize(Stack* ps)
{assert(ps);return ps->top;
}

检测栈是否为空:

检测栈是否为空,如果为空返回非零结果,如果不为空返回0

bool StackEmpty(Stack* ps)
{assert(ps);return ps->top == 0;
}

销毁栈 :

void StackDestroy(Stack* ps)
{free(ps->a);ps->a = NULL;ps->capacity = 0;ps->top = 0;
}

栈模拟源代码:

stack.c

#define _CRT_SECURE_NO_WARNINGS 1#include "stack.h"// 初始化栈 
void StackInit(Stack* ps)
{ps->a = NULL;ps->capacity = 0;ps->top = 0;
}void StackPush(Stack* ps, STDataType data)
{assert(ps);//检查容量if (ps->capacity == ps->top){int newcapacity = (ps->capacity == 0 ? 4 : 2 * ps->capacity);STDataType* tmp = (STDataType*)realloc(ps->a, sizeof(STDataType) * newcapacity);if (tmp == NULL){perror("realloc fail");return;}ps->a = tmp;ps->capacity = newcapacity;}ps->a[ps->top] =data;ps->top++;
}void StackPop(Stack* ps)
{assert(ps);assert(ps->top);ps->top--;
}STDataType StackTop(Stack* ps)
{assert(ps);return ps->a[ps->top - 1];
}int StackSize(Stack* ps)
{assert(ps);return ps->top;
}bool StackEmpty(Stack* ps)
{assert(ps);return ps->top == 0;
}void StackDestroy(Stack* ps)
{free(ps->a);ps->a = NULL;ps->capacity = 0;ps->top = 0;
}

stack.h

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<stdbool.h>
// 支持动态增长的栈
typedef int STDataType;
typedef struct Stack
{STDataType* a;int top;		// 栈顶int capacity;  // 容量 
}Stack;// 初始化栈 
void StackInit(Stack* ps);
// 入栈 
void StackPush(Stack* ps, STDataType data);
// 出栈 
void StackPop(Stack* ps);
// 获取栈顶元素 
STDataType StackTop(Stack* ps);
// 获取栈中有效元素个数 
int StackSize(Stack* ps);
// 检测栈是否为空,如果为空返回非零结果,如果不为空返回0 
bool StackEmpty(Stack* ps);
// 销毁栈 
void StackDestroy(Stack* ps);

队列的实现:

队列的定义:
队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出
FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾 出队列:进行删除操作的一端称为队头

在这里插入图片描述

持续更新中…
敬请期待

http://www.dinnco.com/news/9012.html

相关文章:

  • 品牌网首页太原seo全网营销
  • 如何自己做淘宝客网站自己怎么做网页
  • 网站建设经营属性影响关键词优化的因素
  • 网站添加备案信息吗武汉seo网站排名优化
  • 网站建设维护保密协议书南京网页搜索排名提升
  • 百度收录网站技巧seo哪家好
  • 网站建设费用属于业务宣传费吗阿里云免费域名
  • 做盗号网站如何进行网络推广和宣传
  • ps网站如何做烫金的文字网站为什么要seo?
  • 西地那非的作用与功效余姚seo智能优化
  • b2c网站平台搭建seo研究中心教程
  • 茌平做创建网站公司邯郸网站seo
  • .ent做的网站有哪些快点tv下载安装
  • wordpress搜索功能优化四川seo推广公司
  • 网站怎么做关键词内链关键词怎么提取
  • 微商城科技seo外包服务
  • 网站建设 规范媒体邀约
  • 专业微网站建设公司江苏企业seo推广
  • 用ipv6地址做网站访问aso优化服务站
  • 想自己做点飘纱素材到网站上买百度明星搜索量排行榜
  • 迁安做网站中的cms开发浙江疫情最新情况
  • 乌鲁木齐做网站公司seo运营培训
  • 门户网站建设方案 模板微信搜一搜怎么做推广
  • 网页特效代码免费网站网站制作的流程是什么
  • div做网站网站提交百度收录
  • 我做彩票网站开发彩票网站搭建深圳网络seo推广
  • 网站设置快捷方式到桌面做一套二级域名网站怎么做
  • 商城网站建设行情苏州网站外包
  • 智能网站价格百度云盘登录电脑版
  • 游戏网站建设与策划国外免费网站域名服务器查询