408—栈,队列和数组

news2024/9/20 8:37:51

stl里面的栈中没有清空的函数, 需要自己编写函数清空(while循环返回pop), 更常见的做法是重新定义一个栈,这样的时间复杂度就是O(1)

栈的基本操作,出栈入栈判空和求栈的长度,和取栈顶元素以及清空

出栈和取栈顶元素是需要判空的,否则可能会出现段错误

要清楚的知道栈和队列顶指针在哪里, 以及队尾指针又在哪里;

队列队首指针front指向队首元素的前一个位置(如果为空,栈也是会先指向外面)(不然出队的时候,出队次数和元素个数不等,出队次数会比元素个数少一,且对内元素的个数刚好等于两指针之差),和一个队尾指针rear指向队尾元素(和栈一样都是先++再放)

因此取队首元素的时候实际上是return q[front+1];而取队尾元素则是return q[rear];

栈和队列一样,取元素和出元素的时候必须先判断空,否则会出现段错误

栈和队列一样,stl中没有清空函数,需要自己定义

选择题:

1.

选B

数据结构包括三方面 :逻辑结构,存储结构和数据的运算

什么是逻辑结构?

逻辑结构指数据元素之间的逻辑关系,分为线性结构和非线性结构

什么是线性结构和非线性结构?

线性结构是一个有序数据元素的集合

1.集合中必存在唯一的一个"第一个元素";

2.集合中必存在唯一的一个"最后的元素";

3.除最后元素之外,其它数据元素均有唯一的"后继";

4.除第一元素之外,其它数据元素均有唯一的"前驱"。

数据结构中线性结构指的是数据元素之间存在着“一对一”的线性关系的数据结构。

如(a0,a1,a2,.....,an),a0为第一个元素,an为最后一个元素,此集合即为一个线性结构的集合。

相对应于线性结构,非线性结构的逻辑特征是一个结点元素可能对应多个直接前驱和多个后继

最典型的线性结构是线性表,集合,树和图都是典型的非线性结构

线性结构又可以分成一般线性表,受限线性表(栈和队列以及串),线性表的推广(数组)

因此可以说栈和队列具有相同的逻辑结构,都属于受限线性表,也都属于逻辑结构中的一种,线性结构,顺便一说数组是逻辑结构而不是存储结构。

什么是存储结构?

存储结构是数据结构在计算机中的表示

数据的存储结构是数据的逻辑结构在计算机的表示,数据的存储结构分为顺序存储和链式存储,以及索引存储和散列存储

什么是顺序存储,链式存储和索引存储以及散列存储?

顺序存储:把逻辑上相邻的元素存储在物理位置上也相邻的存储单元,元素与元素之间的关系通过存储单元的邻接来体现

链式存储:不要求逻辑上相邻在物理位置上也相邻,借助元素存储地址的指针来表示元素之间的逻辑关系

索引存储:存储元素信息的同时,建立附加的索引表,通过索引表找到元素

散列存储:通过元素的关键词直接计算出元素的存储地址,又称哈希存储

什么是数据的运算?

数据的运算包括运算的定义和实现,运算定义针对逻辑结构,指出运算的功能,运算的实现针对存储结构,指出运算的具体操作步骤

因此虽然栈和队列均属于同一个逻辑结构(线性结构中的受限线性表),但是它们运算的功能和运算的步骤都不相同,即数据的运算不同。

出自王道P2

2.

栈是限制存储点的线性结构

3.

选C

因为ABD都差不多,都可以指到表头,且删除表尾结点,就是说更适合而已,其实都可以作为链栈

4.

选C

若P3 = 1,则输入序列为P1, P2, 1 ,P4, ..., Pn, 由输出序列可知,p1,p2,p3先进,

  1. p3出,然后p2p1可以接着出,那么p1的值可以是3,所以D错误

  1. 若p1 = 2,p1, p2先进,p3出,p3接下来的输出序列就是2了,p2堵住了p1, 所以p1不可能为2

题目给出了讨论点p3,应该根据p3的左右两侧进行讨论,明显的,只有p3的左右两侧的值可能是2

5.

选C

C语言标识符的要求就是只能英文字母,数字和下划线组成,但是首字符不能是数字,可以是字母或者下划线

根据公式可以得知,3个字符可以得到栈的5种输出结果,分别是

  1. n1_(连续进出三次)

  1. 1n_(进进出出进出)

  1. _1n(进进进出出出)

  1. 1_n(进进出进出出)

  1. n_1(进出进进出出)

其中2和4均属于非法的标识符,即只有三种

6.

选C

给出入栈顺序,和出栈顺序(入队顺序是先入先出,因此入队顺序就是出栈顺序)

7.

选C

从讨论点的两侧进行讨论

若p1 = 2,即3旁边的2先出,则此时栈里面只有1,此时可以入栈4到n,可以选择出栈1,或者4

到n的任何一个出栈,因此,p3可以等于1,或者4到n

若p1 = 4,即3旁边的4先出,那么p3可以为2,即432

综上所述,p3可以为除了3以为的任何数

8.

采用非递归的方法重写递归程序时,必须使用栈

错误

深度优先搜索的题也可以用广度优先搜索来做呀

栈内存:栈内存在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配

可以使用栈模拟递归,可以避免程序因栈内存溢出而程序崩溃,但是模拟递归不一定要用栈

大题:

1.

思路:

利用栈的性质,入栈顺序与出栈顺序相反且对称,如果该链表中心对称,则前半部分的顺序相反应该等于后半部分,因此可以将前半部分序列入栈,然后出栈和后半部分的序列对比,如果都相等则说明中心对称。

代码:

#include<iostream>
#include<stack>
using namespace std;

struct node{
    char data;
    node *next;
};


node* Create(char a[], int n) {
    node *head = new node;
    node *p = head;
    for(int i = 0; i < n; i++) {
        node *q = new node;
        q->data = a[i];
        p->next = q;
        p = q;
    }
    p->next = NULL;
    return head;
} 

void Print(node *head) {
    node *p = head->next;
    while(p != NULL) {
        if(p  != head->next)
            cout << " ";
        cout << p->data;
        p = p->next;
    }
    cout << "\n";
}



bool CentralSymmetry(node *head, int n) {
    stack<char > st;
    node *p = head->next;
    int cnt = n / 2;
    for(int i = 0; i < cnt; i++) {//将左侧的值都放入栈中; 
        st.push(p->data);
        p = p->next;
    }
    if(n % 2 != 0 && p != NULL)//如果序列是奇数序列的话,中间哪个数不算,先走一步; 
        p = p->next;
    while(p != NULL) {
        if(p->data == st.top()) {//出栈顺序和入栈顺序相反且对称; 
            p = p->next;
            st.pop();
        } else 
            return false;
    }
    return true;
}
 
int main() {
    int n = 6;
    char a[n] = {"xyxxyx"};
    node *head = Create(a, n);
    Print(head);
    if(CentralSymmetry(head, n) == true)
        cout << "Yes";
    else 
        cout << "No";
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/172699.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

初学者C语言练习题-函数

二、函数 一个C程序有且只有一个主函数&#xff0c;即main函数。 C程序就是执行主函数里的代码&#xff0c;也可以说这个主函数就是C语言中的唯一入口。而main前面的int就是主函数的类型.printf()是格式输出函数&#xff0c;这里就记住它的功能就是在屏幕上输出指定的信息retur…

MATLAB-自动控制原理-控制系统的数学模型

目录 一、利用MATLAB进行数学模型转换 语法&#xff1a; 例&#xff08;将传递函数写成零极点的形式&#xff09;&#xff1a; 例&#xff08;将传递函数写成因子式的形式&#xff09;&#xff1a; 二、利用MATLAB求系统传递函数 串联等效&#xff1a; 并联等效&#xf…

uboot启动流程详细分析(基于i.m6ull)

uboot介绍 uboot就是一段引导程序&#xff0c;在加载系统内核之前&#xff0c;完成硬件初始化&#xff0c;内存映射&#xff0c;为后续内核的引导提供一个良好的环境。uboot是bootloader的一种&#xff0c;全称为universal boot loader。 一、uboot的makefile 1.1 makefile整…

ccc-sklearn-16-XGBoost(2)

文章目录XGBoost的其他参数选择弱评估器&#xff1a;参数boosterXGB的目标函数&#xff1a;参数objectiveXGB目标函数的求解参数化决策树ftf_tft​&#xff1a;参数alpha&#xff0c;lambda寻找最佳树结构&#xff1a;求解w和T寻找最佳分枝&#xff1a;结构分数之差让树停止生长…

C++ 函数重载:女友说的话到底是什么意思?

&#x1f451;专栏内容&#xff1a;C学习笔记⛪个人主页&#xff1a;子夜的星的主页&#x1f495;座右铭&#xff1a;日拱一卒&#xff0c;功不唐捐 目录一、前言二、函数重载1、函数重载概念2、函数重载的分类Ⅰ、参数类型不同Ⅱ、参数个数不同Ⅲ、参数类型顺序不同3、函数重载…

vs code,platform下载Arduino程序到ESP8266,并传送文件到flash

参考视频&#xff1a;https://www.bilibili.com/video/BV1yR4y1X72D/ 首先要知道 存储空间中有程序的存储地址和文件存储地址&#xff0c;可以对单独一个部分的写入不影响另一部分内容。 vs code 的platformIO插件进行程序和文件的上传 基本创建工程和程序可以参考&#x…

启明欣欣STM32开发板移植FreeRTOS

承接这篇文章&#xff0c;本篇讲述如何把FreeRTOS移植到启明欣欣STM32开发板里&#xff0c;比较简单&#xff0c;网上也有各种教程&#xff0c;本文也是参考其它文章&#xff0c;这里再记录一下。 一 搭建基础工程 启明欣欣STM32开发板上的MCU是STM32F407ZGT6&#xff0c;根据…

智能电视机安装App

每年的12月18日是世界电视机日&#xff0c;电视机诞生于1925年&#xff0c;最初是电子机械式电视机&#xff1b;到了1933年&#xff0c;诞生CRT电视&#xff0c;即黑白电视&#xff0c;它只有黑色或白色&#xff0c;看任何物品都是黑色或者白色。又过了20年&#xff0c;1953年彩…

Java之collection集合、常见数据结构、List和泛型

目录集合概述总结Collection集合的体系特点总结Collection集合常用APICollection集合的遍历方式方式一&#xff1a;迭代器总结方式二&#xff1a;foreach/增强for循环方式三&#xff1a;lambda表达式Collection集合存储自定义类型的对象总结常见数据结构数据结构概述、栈、队列…

【C++初阶】C++基础(一)

C是在C的基础之上&#xff0c;容纳进去了面向对象编程思想&#xff0c;并增加了许多有用的库&#xff0c;以及编程范式等。熟悉C语言之后&#xff0c;对C学习有一定的帮助&#xff0c;本文主要目标&#xff1a;1. 补充C语言语法的不足&#xff0c;以及C是如何对C语言设计不合理…

尚医通-首页显示-前端数据整合(二十六)

目录&#xff1a; &#xff08;1&#xff09;前台用户系统-首页显示-整合静态页面 &#xff08;2&#xff09;前台用户系统-首页显示-数据接口开发 &#xff08;3&#xff09;前端用户系统-首页显示-前端整合 &#xff08;1&#xff09;前台用户系统-首页显示-整合静态页面 …

代码随想录第七天(541、剑指05)

文章目录541. 反转字符串 II发现了三个基础知识的问题看答案改进剑指 Offer 05. 替换空格答案方法1答案方法2知识点一、二、三、总结541. 反转字符串 II 发现了三个基础知识的问题 第一个 这个题目发现了一个非常大的问题&#xff0c;有点不知道自己的Java基础到底有多少窟窿…

C++ 20 新特性 ranges 精讲

C 20 新特性 ranges 精讲 C20 中的 ranges 库使得使用 STL 更加舒适和强大。ranges 库中的算法是惰性的&#xff0c;可以直接在容器上工作&#xff0c;并且可以很容易地组合。简而言之&#xff0c;ranges 库的舒适性和强大性都源于它的函数思想。 在深入细节之前&#xff0c;…

程序员的7个被动收入途径——我如何每月赚 5万

每个人都想过时间和财富自由的生活&#xff0c;世界上有70亿人&#xff0c;但只有不到18000人能做到这一点&#xff0c;大多数人一生都在为钱工作。 研究表明&#xff0c;全世界65.8万富人至少有三种收入来源&#xff0c;而且都是被动收入。换句话说&#xff0c;大多数富人知道…

Create Realtime-chat app

Tech:React,Node.js,Socket.io,MongoDB styled-component ​​​​​​​ 目录 Base setup Register funcitonality Login funcitonality set Avatar/profile picture Chat container setup useEffect basic hook ChatHeader ChatInput ChatMessage Set socket an…

I.MX6ULL裸机开发笔记2:镜像文件

目录 一、boot ROM程序 二、镜像文件五要素 三、芯片手册 四、芯片手册数据解读 1、空偏移 2、IVT表 3、DCD表 一、boot ROM程序 选择内部启动方式&#xff0c;启动boot ROM程序 初始化时钟&#xff0c;外部DDR3从外部存储介质加载代码 boot ROM程序是芯片厂…

十五天学会Autodesk Inventor,看完这一系列就够了(十一),放样和螺旋扫掠(绘弹簧)

众所周知&#xff0c;Autocad是一款用于二维绘图、详细绘制、设计文档和基本三维设计&#xff0c;现已经成为国际上广为流行的绘图工具。Autodesk Inventor软件也是美国AutoDesk公司推出的三维可视化实体模拟软件。因为很多人都熟悉Autocad&#xff0c;所以再学习Inventor&…

Redis缓存数据 | 黑马点评

目录 一、什么是缓存 二、添加Redis缓存操作 三、缓存更新策略 缓存的更新策略 ​编辑 业务场景 主动更新策略 案例 四、缓存穿透 1、是什么 2、解决方案 &#xff08;1&#xff09;缓存空对象 &#xff08;2&#xff09;布隆过滤器 &#xff08;3&#xff09;其…

【春节安全保障有我们】安全狗春节放假值班通知

兔年纳福 辛勤拼搏了一年 终于迎来了福兔吉祥年 众人沉浸于准备过年的氛围中 却有些人为春节期间的网络安全担忧 因为春节也是不法分子们 伺机而动、“搞事情”的“好时机” 2023 NEW YEAR 不得不防的安全风险 1、主机安全遭受威胁 &#xff08;云&#xff09;主机系统…

Rust语言基础

安装 Rust 官网&#xff1a;https://www.rust-lang.org/Linux or Mac: curl https://rustup.rs -sSf | sh Windows: 按官网指示操作 Windows Subsystem for Linux: curl --proto ‘https’ --tlsv1.2 -sSf https://sh.rustup.rs | sh 查看是否安装成功 rustc --version 更…