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

简答网站内容建设的时候内链重要性关于做好全国网站建设

简答网站内容建设的时候内链重要性,关于做好全国网站建设,制作logo网站,项目介绍ppt模板目录 一、栈 1.栈的概念及结构 1.1栈的概念 1.2栈的结构示意图 2.栈的实现 2.1支持动态增长的栈的结构 2.2压栈(入栈) 2.3出栈 2.4支持动态增长的栈的代码实现 二、队列 1.队列的概念及结构 1.1队列的概念 1.2队列的结构示意图 2.队列的实…

目录

一、栈

1.栈的概念及结构

1.1栈的概念

1.2栈的结构示意图

2.栈的实现

2.1支持动态增长的栈的结构

2.2压栈(入栈)

2.3出栈

2.4支持动态增长的栈的代码实现

二、队列

1.队列的概念及结构

1.1队列的概念

1.2队列的结构示意图

2.队列的实现

2.1队列的结构

2.2队尾入队列

2.3队头出队列

2.4队列的代码实现

一、栈

1.栈的概念及结构

1.1栈的概念

        栈是一种特殊的线性表。栈只允许在固定的一端进行插入和删除数据的操作,栈的插入操作叫做压栈(进栈),栈的删除操作叫做出栈,进行数据插入和删除操作的一端叫做栈顶,另一端为栈底。栈中的元素遵循先进后出的原则。

1.2栈的结构示意图

2.栈的实现

        栈一般分为静态栈和支持动态增长的栈,静态栈由于栈的空间大小固定不具实用性,所以我们只针对支持动态增长的栈进行代码实现:

2.1支持动态增长的栈的结构

        栈的实现一般使用数组形式来实现,支持动态增长的栈即开辟一个动态数组a用来存储数据,当栈的容量满了之后方便扩容。

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

2.2压栈(入栈)

        每次压栈首先检查栈的容量是否已满,再决定是否需要扩容,压栈的元素变为新的栈顶

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

2.3出栈

        出栈后新的栈顶变为出栈前的栈顶的前一个元素

// 出栈 
void StackPop(Stack* ps)
{assert(ps);assert(!StackEmpty(ps));ps->top--;
}

2.4支持动态增长的栈的代码实现

#pragma once
#include<assert.h>
#include<stdlib.h>
#include<stdio.h>// 支持动态增长的栈
typedef int STDataType;
typedef struct Stack
{STDataType* a;int top;		// 栈顶int capacity;  // 容量 
}Stack;// 初始化栈 
void StackInit(Stack* ps)
{assert(ps);ps->a = NULL;ps->top = 0;//top指向栈顶的下一个位置,对top的操作需要是:先使用后++ps->capacity = 0;
}// 入栈 
void StackPush(Stack* ps, STDataType data)
{assert(ps);if (ps->top == ps->capacity){int newcapacity = ps->capacity == 0 ? 5 : (ps->capacity) * 2;STDataType* tmp = (STDataType*)realloc(ps->a, sizeof(STDataType) * newcapacity);if (tmp == NULL){perror("realloc:");return;}ps->a = tmp;ps->capacity = newcapacity;}ps->a[ps->top] = data;ps->top++;
}// 出栈 
void StackPop(Stack* ps)
{assert(ps);assert(!StackEmpty(ps));ps->top--;
}// 获取栈顶元素 
STDataType StackTop(Stack* ps)
{assert(ps);assert(!StackEmpty(ps));return ps->a[ps->top - 1];
}// 获取栈中有效元素个数 
int StackSize(Stack* ps)
{assert(ps);return ps->top;
}// 检测栈是否为空,如果为空返回非零结果,如果不为空返回0 
int StackEmpty(Stack* ps)
{assert(ps);return ps->top == 0;
}// 销毁栈 
void StackDestroy(Stack* ps)
{assert(ps);free(ps->a);ps->a = NULL;ps->top = 0;ps->capacity = 0;
}

二、队列

1.队列的概念及结构

1.1队列的概念

        不同于栈的概念,队列只允许在其一端进行插入数据操作,在另一端进行删除数据操作。进行插入数据操作的一端是队尾,进行删除数据操作的一端是队头。队列是一种特殊的线性表,遵循先进先出的原则。

1.2队列的结构示意图

2.队列的实现

2.1队列的结构

        队列的实现一般使用链表的结构更优:

代码:

// 队列成员节点结构
typedef int QDataType;
typedef struct QListNode
{struct QListNode* next;QDataType data;
}QNode;// 队列的结构 
typedef struct Queue
{QNode* front;QNode* rear;int size;
}Queue;

简图:

2.2队尾入队列

代码:

// 队尾入队列 
void QueuePush(Queue* q, QDataType data)
{assert(q);QNode* NewNode = (QNode*)malloc(sizeof(QNode));if (NewNode == NULL){perror("malloc:");return;}NewNode->data = data;NewNode->next = NULL;if (q->size == 0){q->front = q->rear = NewNode;}else{q->rear->next = NewNode;q->rear = q->rear->next;}q->size++;
}

简图:

2.3队头出队列

代码:

// 队头出队列 
void QueuePop(Queue* q)
{assert(q);//assert(!QueueEmpty(q));if (q->front ==q->rear){if (q->front == NULL){return;}else{free(q->front);q->front = q->rear = NULL;}}else{QNode* Tmp = q->front;q->front = Tmp->next;free(Tmp);Tmp = NULL;}q->size--;
}

简图:

2.4队列的代码实现

#pragma once
#include<assert.h>
#include<stdlib.h>
#include<stdio.h>// 链式结构:表示队列成员节点
typedef int QDataType;
typedef struct QListNode
{struct QListNode* next;QDataType data;
}QNode;// 队列的结构 
typedef struct Queue
{QNode* front;QNode* rear;int size;
}Queue;// 初始化队列 
void QueueInit(Queue* q)
{assert(q);q->front = q->rear = NULL;q->size = 0;
}// 队尾入队列 
void QueuePush(Queue* q, QDataType data)
{assert(q);QNode* NewNode = (QNode*)malloc(sizeof(QNode));if (NewNode == NULL){perror("malloc:");return;}NewNode->data = data;NewNode->next = NULL;if (q->size == 0){q->front = q->rear = NewNode;}else{q->rear->next = NewNode;q->rear = q->rear->next;}q->size++;
}// 队头出队列 
void QueuePop(Queue* q)
{assert(q);//assert(!QueueEmpty(q));if (q->front ==q->rear){if (q->front == NULL){return;}else{free(q->front);q->front = q->rear = NULL;}}else{QNode* Tmp = q->front;q->front = Tmp->next;free(Tmp);Tmp = NULL;}q->size--;
}// 获取队列头部元素 
QDataType QueueFront(Queue* q)
{assert(q);assert(!QueueEmpty(q));return q->front->data;
}// 获取队列队尾元素 
QDataType QueueBack(Queue* q)
{assert(q);assert(!QueueEmpty(q));return q->rear->data;
}// 获取队列中有效元素个数 
int QueueSize(Queue* q)
{assert(q);return q->size;
}// 检测队列是否为空,如果为空返回非零结果,如果非空返回0 
int QueueEmpty(Queue* q)
{assert(q);return q->size == 0 ? 1 : 0;
}// 销毁队列 
void QueueDestroy(Queue* q)
{assert(q);while(!QueueEmpty(q)){QueuePop(q);}
}

http://www.yayakq.cn/news/279590/

相关文章:

  • 网站开发制作公司ip形象设计排版
  • 祥云县住房和城乡建设局网站天元建设集团有限公司文件
  • 网站seo公司珠海seo海网站建设
  • 设计网站推荐设计酷站网站包装推广之网络营销案例
  • 监控网站建设需要多少钱镇江手机网站建设
  • 网站制作合作协议wordpress设置可写
  • 网站建设 项目背景17网站一起做网店图片工具
  • 国内最最早做虚拟货币的网站响应式网站是什么意思
  • 个人做公司网站网站后台账号
  • 云阳做网站外贸网站推广公司
  • 西安汽车网站制作WordPress360收录
  • 太原网站优化工具方法想建设个网站
  • 3yx这个网站做刷单网页设计中所需要的素材
  • 做视频网站用什么好免费建设网站制作
  • 专业做网站公司 前景线上宣传有哪些好的方式方法
  • 招聘网站排行榜2021seo网站关键词
  • 公司网站建设的费用如何入账泗洪房产网
  • dedecms网站地图模板怎么wordpress集成后台无法登录
  • 唐山网站建设拓码支付wordpress前端
  • 哪个网站做新中式深圳网络推广大师
  • 网站优化计划书wordpress自动标签链接
  • 微网站建设合同wordpress所需系统
  • 商务网站开发文档wordpress公众账号同步
  • 郴州免费招聘网站做网站的软件初中生
  • 开封网站建设培训江苏省建设厅的官方网站
  • 网站建设公司要多少钱全网seo
  • 物联网平台建设方案南宁百度seo排名优化软件
  • 网页微信二维码登录怎么实现如何优化购物网站建设
  • 世界排名第几引擎seo优
  • 贵阳专用网站建设公众号软文范例100