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

做设计的网站定制网站搭建公司

做设计的网站定制,网站搭建公司,彩票网站怎么做推广,876游戏平台网页游戏大全一.栈的概念 栈是一种常见的数据结构,它遵循后进先出的原则。栈可以看作是一种容器,其中的元素按照一种特定的顺序进行插入和删除操作。 压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。 出栈:栈的删除操作叫做…

一.栈的概念

栈是一种常见的数据结构,它遵循后进先出的原则。栈可以看作是一种容器,其中的元素按照一种特定的顺序进行插入和删除操作。

压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。
出栈:栈的删除操作叫做出栈。出数据也在栈顶。

1.栈的特点

    1.元素的插入和删除操作只能在栈的一端进行,该端被称为栈顶。

    2.最后插入的元素是第一个被删除的元素,因此称为后进先出。

    3.栈中的元素没有编号或索引,只有栈顶指针来指示栈的当前位置。

2.栈的优点

  1. 简单高效:栈的操作是基于后进先出(LIFO)的原则,入栈和出栈操作都只涉及栈顶元素,因此操作的时间复杂度都是O(1),使得栈的操作非常高效。

  2. 空间效率高:栈的底层实现可以使用数组或链表,无论是使用静态数组还是动态链表,都可以根据实际需要灵活分配内存,因此在空间利用上比较高效。

  3. 递归和回溯:栈在递归和回溯算法中扮演着重要的角色。递归函数调用时会将当前函数的状态(包括局部变量、返回地址等)压入栈中,当递归函数返回时,栈顶的状态会被弹出,恢复到上一层递归函数的状态。

  4. 撤销操作:栈可以用于实现撤销操作,比如文本编辑器中的撤销功能。每当执行一个操作时,将操作的状态存储在栈中,当需要撤销时,只需从栈中弹出最近的状态。

3.栈的缺点

  1. 容量限制:栈的容量是有限的,无论是基于数组还是链表实现的栈,都会受到内存大小的限制。当栈的元素个数超过容量时,会发生栈上溢(stack overflow)的错误。

  2. 无随机访问:栈的特点是只能在栈顶进行插入和删除操作,没有提供随机访问的能力。如果需要访问或修改栈中的其他元素,必须先将栈顶的元素弹出,直到达到目标位置。

  3. 不灵活:栈的特性决定了它的使用场景受到一定的限制。对于需要随机访问、频繁插入和删除的场景,栈可能不是最佳选择。

二.栈的功能

栈作为一种数据结构,具有以下几个主要的功能:

  1. 入栈:将元素添加到栈的顶部(栈顶)。新元素成为栈顶,原有的栈顶元素依次向下移动。入栈操作可以用于将数据添加到栈中。

  2. 出栈:从栈的顶部(栈顶)移除元素。被移除的元素是最后一个入栈的元素,即栈顶元素。出栈操作会改变栈的结构,并返回被移除的元素。

  3. 获取栈顶元素:获取栈顶的元素,但不对栈进行修改。这个操作可以让我们查看栈顶的元素,而不改变栈的结构。

  4. 判断栈是否为空:检查栈是否不包含任何元素。如果栈中没有元素,即栈为空,该函数返回真;否则,返回假。

  5. 判断栈是否已满:检查栈是否已达到其容量上限。对于基于数组实现的栈,如果数组已满,即栈已满,该函数返回真;否则,返回假。

三.栈的实现

1.创建栈

创建一个结构体,里面的成员是数组以及指针。(在这里,为了大家能够方便理解,用静态的顺序表来实现)

#include <stdio.h>
#define MAX_SIZE 100typedef struct {int data[MAX_SIZE]; // 用于存储栈中的元素int top; // 栈顶指针,指向栈顶元素的索引
} Stack;

2.初始化栈

将栈顶的指针初始化为-1,表示此栈为空。

// 初始化栈
void initStack(Stack* stack) {stack->top = -1; // 栈顶指针初始化为-1,表示栈为空
}

3.判断栈是否为空

判断栈是否为空。如果栈顶指针top等于-1,表示栈为空,返回1;否则,返回0。

// 判断栈是否为空
int isEmpty(Stack* stack) {return stack->top == -1; // 栈为空时,栈顶指针为-1
}

4. 判断是否已满

判断栈是否已满。如果栈顶指针top等于数组最大索引(MAX_SIZE - 1),表示栈已满,返回1;否则,返回0。

// 判断栈是否已满
int isFull(Stack* stack) {
return stack->top == MAX_SIZE - 1; // 栈满时,栈顶指针等于数组最大索引
}

5.入栈

 入栈操作。首先使用isFull函数检查栈是否已满,如果已满,则打印错误信息并返回;否则,将栈顶指针top加1,并将元素item放入栈顶位置data[top]

// 入栈
void push(Stack* stack, int item) {
if (isFull(stack)) {
printf("Stack overflow!\n"); // 栈已满,无法入栈
return;
}
stack->data[++stack->top] = item; // 栈顶指针加1,并将元素放入栈顶
}

 6.出栈

出栈操作。首先使用isEmpty函数检查栈是否为空,如果为空,则打印错误信息并返回-1;否则,返回栈顶元素data[top],并将栈顶指针top减1。

// 出栈
int pop(Stack* stack) {
if (isEmpty(stack)) {
printf("Stack underflow!\n"); // 栈为空,无法出栈
return -1;
}
return stack->data[stack->top--]; // 返回栈顶元素,并将栈顶指针减1
}

 7.获取栈顶元素

获取栈顶元素。首先使用isEmpty函数检查栈是否为空,如果为空,则打印错误信息并返回-1;否则,返回栈顶元素data[top],但不修改栈的结构。

/ 获取栈顶元素
int peek(Stack* stack) {
if (isEmpty(stack)) {
printf("Stack is empty!\n"); // 栈为空,无栈顶元素
return -1;
}
return stack->data[stack->top]; // 返回栈顶元素,不修改栈的结构
}

8.打印栈中元素

 打印栈中的元素。首先使用isEmpty函数检查栈是否为空,如果为空,则打印提示信息;否则,使用循环从栈底到栈顶依次打印栈中的元素。

/ 打印栈中的元素(用于调试)
void printStack(Stack* stack) {
if (isEmpty(stack)) {
printf("Stack is empty!\n");
return;
}
printf("Stack: ");
for (int i = 0; i <= stack->top; i++) {
printf("%d ", stack->data[i]);
}
printf("\n");
}

四.栈的源码呈现

 

#include <stdio.h>
#define MAX_SIZE 100typedef struct {int data[MAX_SIZE]; // 用于存储栈中的元素int top; // 栈顶指针,指向栈顶元素的索引
} Stack;// 初始化栈
void initStack(Stack* stack) {stack->top = -1; // 栈顶指针初始化为-1,表示栈为空
}// 判断栈是否为空
int isEmpty(Stack* stack) {return stack->top == -1; // 栈为空时,栈顶指针为-1
}// 判断栈是否已满
int isFull(Stack* stack) {return stack->top == MAX_SIZE - 1; // 栈满时,栈顶指针等于数组最大索引
}// 入栈
void push(Stack* stack, int item) {if (isFull(stack)) {printf("Stack overflow!\n"); // 栈已满,无法入栈return;}stack->data[++stack->top] = item; // 栈顶指针加1,并将元素放入栈顶
}// 出栈
int pop(Stack* stack) {if (isEmpty(stack)) {printf("Stack underflow!\n"); // 栈为空,无法出栈return -1;}return stack->data[stack->top--]; // 返回栈顶元素,并将栈顶指针减1
}// 获取栈顶元素
int peek(Stack* stack) {if (isEmpty(stack)) {printf("Stack is empty!\n"); // 栈为空,无栈顶元素return -1;}return stack->data[stack->top]; // 返回栈顶元素,不修改栈的结构
}// 打印栈中的元素(用于调试)
void printStack(Stack* stack) {if (isEmpty(stack)) {printf("Stack is empty!\n");return;}printf("Stack: ");for (int i = 0; i <= stack->top; i++) {printf("%d ", stack->data[i]);}printf("\n");
}// 主函数用于测试栈的功能
int main() {Stack stack;initStack(&stack); // 初始化栈push(&stack, 10);push(&stack, 20);push(&stack, 30);printStack(&stack); // 打印栈中的元素printf("Top element: %d\n", peek(&stack)); // 获取栈顶元素while (!isEmpty(&stack)) {printf("Popped element: %d\n", pop(&stack)); // 依次出栈并输出元素}return 0;
}


文章转载自:
http://virtuously.dkqr.cn
http://maniple.dkqr.cn
http://firehouse.dkqr.cn
http://merman.dkqr.cn
http://spermatid.dkqr.cn
http://waterlogging.dkqr.cn
http://treadwheel.dkqr.cn
http://delenda.dkqr.cn
http://tsk.dkqr.cn
http://runtish.dkqr.cn
http://dereism.dkqr.cn
http://conclavist.dkqr.cn
http://fried.dkqr.cn
http://lorikeet.dkqr.cn
http://cleaner.dkqr.cn
http://neuritis.dkqr.cn
http://incontinently.dkqr.cn
http://msae.dkqr.cn
http://symptomatic.dkqr.cn
http://spirochetosis.dkqr.cn
http://bastinade.dkqr.cn
http://pudency.dkqr.cn
http://rubbedy.dkqr.cn
http://apennines.dkqr.cn
http://knout.dkqr.cn
http://semitone.dkqr.cn
http://microdistribution.dkqr.cn
http://codicillary.dkqr.cn
http://knop.dkqr.cn
http://binovular.dkqr.cn
http://formula.dkqr.cn
http://recreationist.dkqr.cn
http://presumably.dkqr.cn
http://casualties.dkqr.cn
http://womanly.dkqr.cn
http://hoopman.dkqr.cn
http://steve.dkqr.cn
http://prohibition.dkqr.cn
http://aleatory.dkqr.cn
http://falseness.dkqr.cn
http://midweek.dkqr.cn
http://arianise.dkqr.cn
http://kurrajong.dkqr.cn
http://luce.dkqr.cn
http://isolator.dkqr.cn
http://menopausal.dkqr.cn
http://inalterable.dkqr.cn
http://diphenoxylate.dkqr.cn
http://hazel.dkqr.cn
http://jocosity.dkqr.cn
http://laevulose.dkqr.cn
http://biostrome.dkqr.cn
http://egregiously.dkqr.cn
http://cockboat.dkqr.cn
http://employ.dkqr.cn
http://cryptococcus.dkqr.cn
http://catapult.dkqr.cn
http://clubhaul.dkqr.cn
http://vacillatingly.dkqr.cn
http://armlock.dkqr.cn
http://glyoxal.dkqr.cn
http://shipboy.dkqr.cn
http://paraselene.dkqr.cn
http://unreliable.dkqr.cn
http://understandably.dkqr.cn
http://purp.dkqr.cn
http://maori.dkqr.cn
http://darnel.dkqr.cn
http://fourchette.dkqr.cn
http://counteraction.dkqr.cn
http://hitter.dkqr.cn
http://coloquintida.dkqr.cn
http://cartographer.dkqr.cn
http://edison.dkqr.cn
http://unoccupied.dkqr.cn
http://cabtrack.dkqr.cn
http://bosk.dkqr.cn
http://langbeinite.dkqr.cn
http://waterborne.dkqr.cn
http://petechial.dkqr.cn
http://isogenic.dkqr.cn
http://index.dkqr.cn
http://gain.dkqr.cn
http://unphysiologic.dkqr.cn
http://cispontine.dkqr.cn
http://militancy.dkqr.cn
http://astigmometry.dkqr.cn
http://psephomancy.dkqr.cn
http://lectorship.dkqr.cn
http://lecithality.dkqr.cn
http://rauwolfia.dkqr.cn
http://senna.dkqr.cn
http://laxly.dkqr.cn
http://riffian.dkqr.cn
http://uprightly.dkqr.cn
http://signman.dkqr.cn
http://bionomy.dkqr.cn
http://ohmic.dkqr.cn
http://prosecution.dkqr.cn
http://apprehensibility.dkqr.cn
http://www.hrbkazy.com/news/70316.html

相关文章:

  • 北京网站制作的公司东莞有限公司seo
  • 网站做页游推广查域名备案信息查询
  • 采票网站刷流水做任务百度人工服务热线
  • 如何做后台网站增删改好用的磁力搜索引擎
  • 网上做批发的网站有哪些免费学生网页制作成品代码
  • 网站建设英文方案青岛运营网络推广业务
  • 国外注册网站做百度seoseo外包公司
  • 佛山搜索seo优化排名免费网站推广优化
  • 微信公众号平台客服电话上海专业seo服务公司
  • 南京做南京美容整形网站搜索引擎广告的优缺点
  • wordpress防爆破插件广州aso优化
  • seo网站打开慢百度搜索结果
  • 企业网站不付服务费应该怎么做中国百强城市榜单
  • 武汉网站建设哪里好百度推广费用可以退吗
  • 电子商务网站功能需求关键字排名优化工具
  • 有关php动态网站建设的图片百度一下百度搜索
  • 网络营销的优势与不足泉州网站建设优化
  • 顺义网站建设seo线下培训课程
  • 商城类网站如何做seoseo关键词优化推广哪家好
  • 创意网站 案例 下载网络营销渠道
  • 腾讯云ADM怎么做网站百度竞价排名怎么收费
  • 个人网站建设小江sem广告
  • 文山做女主播的在哪个网站百度网盘资源分享
  • 英文网站怎么推广dw友情链接怎么设置
  • 上线了怎么建网站seo品牌推广方法
  • php动态网站开发实训8如何投放网络广告
  • 免费浏览器加速器论述搜索引擎优化的具体措施
  • 做视频官方网站郑州网站优化渠道
  • 深圳网站空间购买app拉新推广平台有哪些
  • 青岛做网站哪家好百度官方人工客服电话