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

北京上海网站建设品牌推广公司

北京上海网站建设,品牌推广公司,大良建网站,php能干嘛 wordpress🏝️专栏:【数据结构实战篇】 🌅主页:f狐o狸x 在前面的文章中我们用C语言实现了栈的数据结构,本期内容我们将实现队列的数据结构 一、队列的概念 队列:只允许在一端进行插入数据操作,在另一端…

🏝️专栏:【数据结构实战篇】

🌅主页:f狐o狸x


         在前面的文章中我们用C语言实现了栈的数据结构,本期内容我们将实现队列的数据结构

一、队列的概念

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

        入队列:进行插入操作的一端称为队尾

        出队列:进行删除操作的一端称为队头

二、队列的实现

        2.1 队列的定义

        动用你聪明的小脑袋想一想队列的结构是啥样的,是不是从队尾插入数据,再从队头输出数据,那是不是在队列的结构里面需要一个头结点,还需要一个尾节点,为了方便后面的操作,我们再加一个size变量来记录当前队列的大小


typedef int QDatatype;typedef struct QueueNode
{QDatatype Data;struct QueueNode* next;
}QueueNode;typedef struct Queue
{struct QueueNode* head;struct QueueNode* tail;int size;
}Queue;

        2.2 队列的初始化

//初始化队列
void QueueInit(Queue* pq)
{pq->size = 0;pq->head = NULL;pq->tail = NULL;
}

        2.3 队列入、出

        其实这里就是简单的尾插和头删

//队列增
void QueuePush(Queue* pq, QDatatype x)
{QueueNode* newnode = (QueueNode*)malloc(sizeof(QueueNode));if (newnode == NULL){perror("malloc fail");return;}newnode->Data = x;newnode->next = NULL;if (pq->head == NULL){assert(pq->tail == NULL);pq->head = pq->tail = newnode;}else{pq->tail->next = newnode;pq->tail = newnode;}pq->size++;
}
//队列删
void QueuePop(Queue* pq)
{assert(pq);assert(!QueueEmpty(pq));QueueNode* cur = pq->head;if (cur->next == NULL){free(cur);cur = NULL;}else{pq->head = pq->head->next;free(cur);cur = NULL;}pq->size--;
}

        2.4 检查队列是否为空、队列大小

//队列大小
int QueueSize(Queue* pq)
{assert(pq);return pq->size;
}
//判断队列是否为空
bool QueueEmpty(Queue* pq)
{assert(pq);return pq->size == 0;
}

        2.5 返回队头、队尾

//返回队头
QDatatype QueueFront(Queue* pq)
{assert(pq);assert(!QueueEmpty(pq));return pq->head->Data;
}
//返回队尾
QDatatype QueueBack(Queue* pq)
{assert(pq);assert(!QueueEmpty(pq));return pq->tail->Data;
}

        2.6 测试队列


int main()
{Queue Q = { 0 };QueueInit(&Q);QueuePush(&Q, 1);QueuePush(&Q, 2);QueuePush(&Q, 3);QueuePush(&Q, 4);QueuePush(&Q, 5);QueuePush(&Q, 6);while (!QueueEmpty(&Q)){printf("%d ", QueueFront(&Q));QueuePop(&Q);}return 0;
}

        运行结果如下:

三、实战练习

        学习了栈和队列的数据结构,我们现在就来练练手

        3.1 有效的括号

        力扣链接:有效的括号

        给定一个只包括 '('')''{''}''['']' 的字符串 s ,判断字符串是否有效

        3.1.1题目分析

        这个题可以用栈的结构来完成这个题,如果字符串中是左括号 ‘ ( ’ ‘ [ ’ ‘ { ’,则正常入栈,如果字符串为右括号‘ ) ’ ‘ ] ’ ‘ } ’,则将这个字符和栈顶元素对比,如果相等就进行下一次循环,如果没有匹配成功,则放回false,循环结束后,并且栈里没有元素了,就返回true,记得在每次返回的时候将空间释放了,不要有内存泄漏哈~

        3.1.2 解题代码

        对了,因为这里用的是c语言,因此我们需要自己手搓一个栈,不过问题不大啦

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <stdbool.h>typedef int StackDataType;typedef struct stack
{int* StackData;int top;int capacity;
}ST;//初始化
void InitStack(ST* ps);
//销毁
void DestoryStack(ST* ps);
//增加
void STPush(ST* ps, StackDataType x);
//删除
void STPop(ST* ps);
//判断是否为空
bool STEmpty(ST* ps);
//栈顶位置
StackDataType STTop(ST* ps);//初始化
void InitStack(ST* ps)
{assert(ps);ps->StackData = (StackDataType*)malloc(sizeof(StackDataType)*4);if (ps->StackData == NULL){perror("InitStack::malloc");return;}ps->capacity = 4;ps->top = 0;
}//销毁
void DestoryStack(ST* ps)
{assert(ps);free(ps->StackData);ps->StackData = NULL;ps->capacity = 0;ps->top = 0;
}//增加
void STPush(ST* ps, StackDataType x)
{assert(ps);if (ps->top == ps->capacity){StackDataType* tmp = (StackDataType*)realloc(ps->StackData,sizeof(StackDataType) * ps->capacity * 2);if(tmp == NULL){perror("STPush::realloc");return;}ps->StackData = tmp;ps->capacity *= 2;}ps->StackData[ps->top] = x;ps->top += 1;}//删除
void STPop(ST* ps)
{assert(ps);assert(!STEmpty(ps));ps->top--;
}//判断是否为空
bool STEmpty(ST* ps)
{assert(ps);return ps->top == 0;
}//栈顶位置
StackDataType STTop(ST* ps)
{assert(ps);assert(!STEmpty(ps));return ps->StackData[ps->top - 1];
}bool isValid(char* s) {ST st = {0};InitStack(&st);char* ps = s;while(*s){if(*s == '(' || *s == '[' || *s == '{'){STPush(&st, *s);//左括号入栈}else{if(STEmpty(&st)){DestoryStack(&st);return false;}char top = STTop(&st);STPop(&st);if((*s == ')' && top != '(') ||(*s == ']' && top != '[') ||(*s == '}' && top != '{')){DestoryStack(&st);return false;                }}s++;}bool ret = STEmpty(&st);DestoryStack(&st);return ret;
}

        3.2 用队列实现栈

        力扣链接:用队列实现栈

        请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(pushtoppop 和 empty

        3.2.1 题目分析

        题目要求我们用两个队列来实现栈的结构,因此我们可以先随便将数据输入到一个队列中,再把队列一中的数据除了最后一个,全部转移到另外一个空的队列中,这样就可以实现栈的操作

         3.2.2 解题代码

        这里也是同样的需要我们手搓一个队列出来,不过上面已经实现过来,所以我们直接cv一下

typedef int QDatatype;typedef struct QueueNode
{QDatatype Data;struct QueueNode* next;
}QueueNode;typedef struct Queue
{struct QueueNode* head;struct QueueNode* tail;int size;
}Queue;//初始化队列
void QueueInit(Queue* pq);
//销毁队列
void QueueDestroy(Queue* pq);
//队列增
void QueuePush(Queue* pq, QDatatype x);
//队列删
void QueuePop(Queue* pq);
//队列大小
int QueueSize(Queue* pq);
//判断队列是否为空
bool QueueEmpty(Queue* pq);
//返回队头
QDatatype QueueFront(Queue* pq);
//返回队尾
QDatatype QueueBack(Queue* pq);//初始化队列
void QueueInit(Queue* pq)
{pq->size = 0;pq->head = NULL;pq->tail = NULL;
}//销毁队列
void QueueDestroy(Queue* pq)
{assert(pq);QueueNode* cur = pq->head;while (cur){QueueNode* del = cur;cur = cur->next;free(del);}pq->head = NULL;pq->tail = NULL;pq->size = 0;
}
//队列增
void QueuePush(Queue* pq, QDatatype x)
{QueueNode* newnode = (QueueNode*)malloc(sizeof(QueueNode));if (newnode == NULL){perror("malloc fail");return;}newnode->Data = x;newnode->next = NULL;if (pq->head == NULL){assert(pq->tail == NULL);pq->head = pq->tail = newnode;}else{pq->tail->next = newnode;pq->tail = newnode;}pq->size++;
}
//队列删
void QueuePop(Queue* pq)
{assert(pq);assert(!QueueEmpty(pq));if (pq->head->next == NULL){free(pq->head);pq->head = NULL;}else{QueueNode* next = pq->head->next;free(pq->head);pq->head = next;}pq->size--;
}
//队列大小
int QueueSize(Queue* pq)
{assert(pq);return pq->size;
}
//判断队列是否为空
bool QueueEmpty(Queue* pq)
{assert(pq);return pq->size == 0;
}
//返回队头
QDatatype QueueFront(Queue* pq)
{assert(pq);assert(!QueueEmpty(pq));return pq->head->Data;
}
//返回队尾
QDatatype QueueBack(Queue* pq)
{assert(pq);assert(!QueueEmpty(pq));return pq->tail->Data;
}typedef struct {Queue q1;Queue q2;
} MyStack;MyStack* myStackCreate() {MyStack* pst = (MyStack*)malloc(sizeof(MyStack));if(pst == NULL){perror("myStackCreate::malloc");}QueueInit(&pst->q1);QueueInit(&pst->q2);return pst;
}void myStackPush(MyStack* obj, int x) {if(!QueueEmpty(&obj->q1)){QueuePush(&obj->q1,x);}else{QueuePush(&obj->q2,x);}
}int myStackPop(MyStack* obj) {Queue* emptyQ = &obj->q1;Queue* nonemptyQ = &obj->q2;if(!QueueEmpty(&obj->q1)){emptyQ = &obj->q2;nonemptyQ = &obj->q1;}while(QueueSize(nonemptyQ)>1){QueuePush(emptyQ,QueueFront(nonemptyQ));QueuePop(nonemptyQ);}int top = QueueFront(nonemptyQ);QueuePop(nonemptyQ);return top;
}int myStackTop(MyStack* obj) {if(!QueueEmpty(&obj->q1)){return QueueBack(&obj->q1);}else{return QueueBack(&obj->q2);}}bool myStackEmpty(MyStack* obj) {return QueueEmpty(&obj->q1) && QueueEmpty(&obj->q2);
}void myStackFree(MyStack* obj) {QueueDestroy(&obj->q1);QueueDestroy(&obj->q2);free(obj);
}

        本期内容到这里就完啦,感谢大家观看~

        对了对了,留下你的三连吧,求你啦~ QAQ


文章转载自:
http://martinmas.fznj.cn
http://unwrap.fznj.cn
http://occultation.fznj.cn
http://convoluted.fznj.cn
http://canonization.fznj.cn
http://wieldy.fznj.cn
http://radiostrontium.fznj.cn
http://multijet.fznj.cn
http://republication.fznj.cn
http://entireness.fznj.cn
http://midstream.fznj.cn
http://millennialist.fznj.cn
http://wing.fznj.cn
http://baudrons.fznj.cn
http://ventriloquous.fznj.cn
http://backstairs.fznj.cn
http://imperviously.fznj.cn
http://subclassify.fznj.cn
http://feulgen.fznj.cn
http://sapsago.fznj.cn
http://ornamental.fznj.cn
http://thrombin.fznj.cn
http://rascallion.fznj.cn
http://reoppose.fznj.cn
http://formfeed.fznj.cn
http://hillcrest.fznj.cn
http://carnificial.fznj.cn
http://praesepe.fznj.cn
http://wholescale.fznj.cn
http://ophiolater.fznj.cn
http://kiwi.fznj.cn
http://sphingolipidosis.fznj.cn
http://rowover.fznj.cn
http://hoopskirt.fznj.cn
http://inaptly.fznj.cn
http://colporrhaphy.fznj.cn
http://disjunct.fznj.cn
http://diener.fznj.cn
http://signifiant.fznj.cn
http://november.fznj.cn
http://button.fznj.cn
http://hsaa.fznj.cn
http://portage.fznj.cn
http://parasexual.fznj.cn
http://pal.fznj.cn
http://antitechnology.fznj.cn
http://veneration.fznj.cn
http://ambuscade.fznj.cn
http://dublin.fznj.cn
http://hebei.fznj.cn
http://passively.fznj.cn
http://tollgatherer.fznj.cn
http://anticolonialism.fznj.cn
http://maoist.fznj.cn
http://sensualist.fznj.cn
http://amicability.fznj.cn
http://actively.fznj.cn
http://outtrade.fznj.cn
http://adipic.fznj.cn
http://funambulist.fznj.cn
http://misinformation.fznj.cn
http://rosetta.fznj.cn
http://lethality.fznj.cn
http://curability.fznj.cn
http://rendu.fznj.cn
http://coprology.fznj.cn
http://abdicable.fznj.cn
http://electrobath.fznj.cn
http://stopper.fznj.cn
http://printmaking.fznj.cn
http://retiral.fznj.cn
http://nubile.fznj.cn
http://widespread.fznj.cn
http://productivity.fznj.cn
http://helaine.fznj.cn
http://conciliate.fznj.cn
http://legislatorial.fznj.cn
http://vergil.fznj.cn
http://myxoma.fznj.cn
http://em.fznj.cn
http://amandine.fznj.cn
http://oreology.fznj.cn
http://annulment.fznj.cn
http://mutoscope.fznj.cn
http://howl.fznj.cn
http://tombstone.fznj.cn
http://hayfork.fznj.cn
http://rebreathe.fznj.cn
http://highborn.fznj.cn
http://inexistence.fznj.cn
http://ruskinize.fznj.cn
http://soteriology.fznj.cn
http://syncretism.fznj.cn
http://induce.fznj.cn
http://callipee.fznj.cn
http://corbie.fznj.cn
http://frogmouth.fznj.cn
http://hothouse.fznj.cn
http://pertinent.fznj.cn
http://gerontophil.fznj.cn
http://www.dt0577.cn/news/57730.html

相关文章:

  • 网站建设技术招聘软文营销文章300字
  • 珠海网站建设方案开发百度推广是什么意思
  • 网站建设与管理是哪个软件百度企业号
  • 大庆市住房与城乡建设局网站成都高新seo
  • 做其他国家语言网站爱战网官网
  • 巢湖网站制作青岛网站建设运营推广
  • wordpress设置访客登陆广州seo网站推广
  • 怎么搭建一个网站教程百度官网下载安装免费
  • 南京网站开发南京乐识不错武汉最新疫情
  • 成都广告公司网站建设站长统计app进入网址新版小猪
  • 食品网站建设实施方案网站市场推广
  • 上海好的高端网站建设google竞价推广
  • 网站开发用的软件今日最新的新闻
  • 网站做目录seo在哪可以学
  • 推广做网站联系方式搜索引擎优化
  • 普陀区建设局网站合作seo公司
  • 微信网站怎么制作二级域名免费分发
  • 徐汇网站推广公司百度登录注册
  • 品牌手机网站开发公司哪家好今日北京新闻
  • 可视化网站开发软件推广软文模板
  • 如何让百度口碑收录自己的网站百度搜索风云榜单
  • 有什么网站可以做微信支付宝百度网站推广价格
  • 自己做网站怎么赢利个人网站建站流程
  • wordpress wp采集规则seo搜索引擎优化方法
  • 手机网页自动跳转怎么处理seo需要付费吗
  • 手机做网站服务器吗企业网站推广策略
  • 鲅鱼圈做网站营销推广的公司
  • 手工做的网站泉州关键词搜索排名
  • 深圳网站关键词排名查询深圳谷歌网络推广公司
  • 大气的房产网站百度网盘登录