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

湖州做网站建设的公司什么是最经典最常用的网站推广方式

湖州做网站建设的公司,什么是最经典最常用的网站推广方式,汽车之家网页版入口,济南优化网站排名文章目录 栈与队列1. 栈基本操作实现(基于链表)代码运行结果 应用场景 2. 队列基本操作实现代码运行结果 应用场景 栈与队列 1. 栈 栈是一种操作受限的线性结构。操作受限体现在,栈只能在一端添加和删除元素,符合后进先出 ( LIFO ) 的特性,…

文章目录

  • 栈与队列
    • 1. 栈
      • 基本操作
      • 实现(基于链表)
        • 代码
        • 运行结果
      • 应用场景
    • 2. 队列
      • 基本操作
      • 实现
        • 代码
        • 运行结果
      • 应用场景

栈与队列

1. 栈

栈是一种操作受限的线性结构。操作受限体现在,栈只能在一端添加和删除元素,符合后进先出 ( LIFO ) 的特性,如下图所示:

在这里插入图片描述

基本操作

  1. 入栈
  2. 出栈
  3. 查看栈顶元素
  4. 判空

实现(基于链表)

代码
// Stack.h
// 定义结点类型
typedef struct node {int val;struct node* next;} Node;// API
void push_stack(Node** pstack, int val);
int  pop_stack(Node** pstack);
int  peek_stack(Node* stack);
bool is_empty(Node* stack);
// Stack.c
#include "stack.h"
#include <stdlib.h>
#include <stdio.h>void push_stack(Node** pstack, int val) {// 头插法Node* newNode = (Node*)malloc(sizeof(Node));newNode->val = val;newNode->next = NULL;newNode->next = *pstack;*pstack = newNode;
}int pop_stack(Node** pstack) {if (*pstack == NULL) {printf("栈为空,无法弹出元素");return -1;}int pop_val = (*pstack)->val;*pstack = (*pstack)->next;printf("弹出元素:%d\n", pop_val);return pop_val;
}int  peek_stack(Node* stack) {if (stack == NULL) {printf("栈为空, 无法查看栈顶元素\n");return -1;}printf("栈顶元素:%d\n", stack->val);return stack->val;
}bool is_empty(Node* stack) {if (stack) {printf("栈不为空\n");return false;}printf("栈为空\n");return true;
}
// main.c
#include<stdio.h>
#include"stack.h"int main(void) {Node* stack = NULL;push_stack(&stack, 1);push_stack(&stack, 2);peek_stack(stack);pop_stack(&stack);peek_stack(stack);is_empty(stack);pop_stack(&stack);peek_stack(stack);is_empty(stack);return 0;}
运行结果

在这里插入图片描述

应用场景

栈的应用场景是多种多样的:

  • 函数调用栈
  • 符号匹配问题
  • 表达式求值
  • 深度优先搜索(DFS)
  • . . .

2. 队列

队列是另一种操作受限的线性结构。操作受限体现在,队列只能在一端添加元素,在另一端删除元素,符合**先进先出(FIFO)**的特性。

在这里插入图片描述

基本操作

  1. 入队列
  2. 出队列
  3. 查看队头元素
  4. 判空

实现

代码
  1. 用链表实现

  2. 用数组实现(没使用循环数组的方法, 没有自动扩容功能

    // Queue.h
    #define N 10typedef struct {int elements[N];int front;int rear;int size;
    } Queue;// API
    Queue* create_queue();
    void destroy_queue(Queue* q);void push_queue(Queue* q, int val);
    int pop_queue(Queue* q);
    int peek_queue(Queue* q);bool is_empty(Queue* q);
    bool is_full(Queue* q);
    
    // Queue.c
    #include "queue.h"
    #include <stdio.h>
    #include <malloc.h>Queue* create_queue() {Queue* que = (Queue*)malloc(sizeof(Queue));que->front = 0; // 队头que->rear = -1; // 队尾que->size = 0;return que;
    }void destroy_queue(Queue* q) {free(q);printf("队列已释放\n");
    }void push_queue(Queue* q, int val) {if (is_full(q)) {printf("队列已满,无法插入元素\n");return;}if (q->rear == N - 1) { // 队尾指针已经到数组尾部边界,需要将元素移动到数组头部for (int i = q->front, j = 0; i <= q->rear; i++, j++) {q->elements[j] = q->elements[i];}q->front = 0;q->rear = q->size - 1;}q->elements[q->rear + 1] = val;q->rear++;q->size++;printf("成功在队尾插入元素:%d\n", val);
    }int pop_queue(Queue* q) {if (is_empty(q)) {printf("队列为空,无法弹出元素\n");return -1;}int pop_val = q->elements[q->front];q->front++;q->size--;printf("成功在队头弹出元素:%d\n", pop_val);return pop_val;
    }int peek_queue(Queue* q) {if (is_empty(q)) {printf("队列为空,无法查看元素\n");return -1;}return q->elements[q->front];
    }bool is_full(Queue* q) {if (q->rear - q->front == N - 1) {// printf("队列已满\n");return true;}return false;
    }bool is_empty(Queue* q) {if (q->rear < q->front) {// printf("队列为空\n");return true;}return false;
    }
    
    // main.c
    #include <stdio.h>
    #include "queue.h"int main(void) {Queue* que = create_queue();pop_queue(que);push_queue(que, 1);push_queue(que, 2);push_queue(que, 3);printf("查看队头元素:%d\n", peek_queue(que));pop_queue(que);printf("查看队头元素:%d\n", peek_queue(que));push_queue(que, 4);push_queue(que, 5);push_queue(que, 6);push_queue(que, 7);push_queue(que, 8);push_queue(que, 9);push_queue(que, 10);printf("队头索引:%d  队尾索引:%d\n", que->front, que->rear);printf ("队列元素个数:%d\n", que->size);push_queue(que, 11);printf("队头索引:%d  队尾索引:%d\n", que->front, que->rear);printf ("队列元素个数:%d\n", que->size);push_queue(que, 12);destroy_queue(que);return 0;
    }
    
运行结果

在这里插入图片描述

应用场景

  • 缓冲
  • 广度优先搜索(BFS)
  • . . .
http://www.dtcms.com/wzjs/793609.html

相关文章:

  • 青岛网站建设团队wordpress导航404
  • 淘宝做推广网站做化学合成的网站有哪些
  • dw怎么做网站相册网站建设项目评审意见
  • 网站设计建设收费标准江苏建设工程有限公司简介
  • 常州网站制作套餐无锡哪家网站做的比较好
  • 怎么自己建一个论坛网站国外品牌vi设计
  • python网站开发简单吗海口网站建设品牌大全
  • 长沙门户网站建设公司资源猫
  • 深圳市做网站公司下载网站app
  • 搜狐网站网络营销怎么做新平台推广赚钱
  • wordpress主题 演示数据做网站seo赚钱吗
  • 做电子网站宁波市有哪些网站建设公司
  • 平台网站建设方案标书郴州有哪些推广平台
  • 全自动建站系统代理服务器在线
  • 检测WordPress网站的安全性htm网站制作
  • 潮州市网站建设公司巢湖做网站的公司
  • 公司网站建设内部调查黄骅怎么读
  • 孝感网站开发培训机构网站的电子地图怎么做
  • 榆林网站建设公司电话江苏园博园建设开发有限公司网站
  • 云主机做网站永久保留网站温州建网站公司
  • 网站快速排名的方法5网站开发之美
  • 三明市网站建设东营网站seo外包
  • 重庆要做网站推广三网合一网站建设程序
  • 企业网站诊断与优化方案网站建设费用低设计好
  • 广州木马网站建设公司怎么样公司网站建设 上海
  • 网站页面设计怎么做网站开发接入支付宝
  • 天河建设网站公司个人公司网页如何设计
  • 网站建设合同用贴印花税吗有色建设网站
  • 建一个图片类网站需要多少钱wordpress自定义评论头像
  • 手机设计软件有哪些软件搜索引擎优化是指