数据结构01-线性结构-链表栈队列-栈篇

news2025/1/21 7:18:03

文章目录

    • 参考:
    • 总结
    • 大纲要求
    • 线性结构-栈
      • 回文匹配
      • 小猫钓鱼的故事

在这里插入图片描述

参考:

线性结构-栈

总结

本系列为C++数据结构系列,会介绍 线性结构,简单树,特殊树,简单图等。本文为线性结构部分。

大纲要求

  1. 线性结构
    【 3 】链表:单链表、双向链表、循环链表
    【 3 】栈
    【 3 】队列

线性结构-栈

栈是Stack一个后进先出Last In First Out,LIFO的线性表,他要求只在表尾对数据执行删除和插入等操作。
栈就是一个线性表,可以是数组、也可以是链表。但它的操作有别于一般的线性表。栈的元素必须先进后出,也就是先进入栈的元素必须后出栈。而不能像一般的链表或数组那样从任意位置读取元素。
栈的操作只能在线性表的表尾进行,这个标为被称为栈的栈顶top,相应的表头被称为栈的栈底bottom
在这里插入图片描述

栈的数据必须从栈顶进入,也必须从栈顶取出,先入栈的数据在后入栈的数据下面。
栈中不含有任何数据时的状态叫作空栈,此时栈顶top等于栈底bottom。

回文匹配

#include <stdio.h>
#include <string.h>
int main ( )
{
    char a[ 101],s[101] ;
    int i, len, mid,next, top;
    gets(a) ; //读入一行字符串
    len=strlen(a) ; //求字符串的长度
    mid=len / 2-1; //l求字符串的中点
    top=0 ; //栈的初始化
//将mid前的字符依次入栈
    for(i=0 ; i<=mid; i++)
        s [++top]=a[ i] ;
//判断字符串的长度是奇数还是偶数,并找出需要进行字符匹配的起始下标
    if ( len%2==0 )
        next=mid+1;
    else
        next=mid+2;
//开始匹配
    for(i=next; i<=len-1; i++)
    {
        if(a[i]!=s[top])
            break;
        top--;
    }
    if(top==0)
        printf("yes");
    else
        printf("no");

    getchar();
    getchar();
    return 0;
}

在这里插入图片描述

小猫钓鱼的故事

#include <stdio.h>


struct queue
{
    int data[100];//100
    int head;
    int tail;
};

struct stack
{
    int data[10];
    int top;

};
int main ( )
{
    struct queue q1,q2;
    struct stack s;
    int book[10]= {0};
    int i,t;

    //初始化队列
    q1.head=1;
    q1.tail=1;
    q2.head=1;
    q2.tail=1;

    // 初始化栈
    s.top=0;

    //int q1_data[7]= {0,2,4,1,2,5,6};
    //初始化标记数组,标记哪些牌在桌上
    for(i=1; i<=6; i++)
    {
        scanf("%d",&q1.data[q1.tail]);
        //q1.data[q1.tail]=q1_data[i];
        q1.tail++;
    }

    //int q2_data[7]= {0,3,1,3,5,6,4};
    //初始化标记数组,标记哪些牌在桌上
    for(i=1; i<=6; i++)
    {
        scanf("%d",&q2.data[q2.tail]);
        //q2.data[q1.tail]=q2_data[i];
        q2.tail++;
    }

    //当队列不为空时执行循环
    while(q1.head<q1.tail &&
            q2.head<q2.tail)
    {
        t=q1.data[q1.head];//q1取出一张牌

        printf("q1---> t  %d , book[t]  %d \n",&t,&book[t]);
        // 判断q1当前打出的牌能否赢牌
        if(book[t]==0)//表明桌面上没有牌面为t的牌
        {
            // q1次轮没有赢牌
            q1.head++;//把q1打出的牌出列
            s.top++;
            s.data[s.top]=t;//把打出的牌t放在桌上,入栈
            book[t]=1;//标记桌上有牌面为t的牌
        }
        else
        {
            //q1可以赢牌
            q1.head++;
            q1.data[q1.tail]=t;//把刚打的牌放在手牌中的末尾 入队
            q1.tail++;
            //把桌上可以赢得的牌依次放入手中
            while(s.data[s.top]!=t)
            {
                book[s.data[s.top]]=0;//取消标记
                q1.data[q1.tail]=s.data[s.top];//依次放入队尾
                q1.tail++;
                s.top--; //栈中少了一张牌,栈顶减一

            }

        }

        //q2出一张牌
        t=q2.data[q2.head];
        printf("q2---> t  %d , book[t]  %d \n",&t,&book[t]);
        // 判断q2当前打出的牌能否赢牌
        if(book[t]==0)//表明桌面上没有牌面为t的牌
        {
            // q2次轮没有赢牌
            q2.head++;//把q1打出的牌出列
            s.top++;
            s.data[s.top]=t;//把打出的牌t放在桌上,入栈
            book[t]=1;//标记桌上有牌面为t的牌
        }
        else
        {
            //q2可以赢牌
            q2.head++;
            q2.data[q2.tail]=t;//把刚打的牌放在手牌中的末尾 入队
            q2.tail++;
            //把桌上可以赢得的牌依次放入手中
            while(s.data[s.top]!=t)
            {
                book[s.data[s.top]]=0;//取消标记
                q2.data[q2.tail]=s.data[s.top];//依次放入队尾
                q2.tail++;
                s.top--; //栈中少了一张牌,栈顶减一

            }

        }


    }

    if(q2.head ==q2.tail)
    {
        printf("q1赢win\n");
        printf("q1当前手中的牌是:");
        for(i=q1.head; i<=q1.tail-1; i++)
        {
            printf(" %d",q1.data[i]);
        }
        //如果桌面有牌,输出桌面的牌
        if(s.top>0)
        {
            printf("\n桌上的牌是");
            for(i=1; i<=s.top; i++)
            {
                printf(" %d",s.data[i]);
            }
        }
        else
        {
            printf("\n桌上没牌了");

        }
    }
    else
    {
        printf("q2赢win\n");
        printf("q2当前手中的牌是:");
        for(i=q2.head; i<=q2.tail-1; i++)
        {
            printf(" %d",q2.data[i]);
        }
        //如果桌面有牌,输出桌面的牌
        if(s.top>0)
        {
            printf("\n桌上的牌是");
            for(i=1; i<=s.top; i++)
            {
                printf(" %d",s.data[i]);
            }
        }
        else
        {
            printf("\n桌上没牌了");

        }

    }


    getchar();
    getchar();
    return 0;
}

在这里插入图片描述

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

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

相关文章

回归预测 | MATLAB实现GRU(门控循环单元)多输入单输出(不调用工具箱函数)

回归预测 | MATLAB实现GRU(门控循环单元)多输入单输出(不调用工具箱函数) 文章目录 回归预测 | MATLAB实现GRU(门控循环单元)多输入单输出(不调用工具箱函数)预测效果基本介绍程序设计参考资料 预测效果 基本介绍 GRU神经网络是LSTM神经网络的一种变体&#xff0c;LSTM 神经网 …

集合面试题--二叉树,红黑树,散列表

目录 二叉树 二叉搜索树 时间复杂度 总结 红黑树 红黑树特质 复杂度 总结 散列表 散列函数 哈希冲突 散列冲突-链表法&#xff08;拉链&#xff09; 时间复杂度 ​总结 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是…

Mapbox GL JS学习之路(一):初识 Mapbox GL JS

文章目录 1 什么是Mapbox GL JS2 Mapbox GL JS 可以用来做什么2.1 在交互式地图上使用自己的数据自定义设计的地图样式2.2 商店定位器&#xff08;Store locator&#xff09;2.3 故事讲述&#xff08;Storytelling&#xff09;2.4 用于基于位置的数据可视化的仪表板&#xff08…

C++ deque/queue/stack的底层原理

deque容器的存储结构 和 vector 容器采用连续的线性空间不同&#xff0c;deque 容器存储数据的空间是由一段一段等长的连续空间构成&#xff0c;各段空间之间并不一定是连续的&#xff0c;可以位于在内存的不同区域。 deque采用一块所谓的map数组&#xff08;注意&#xff0c…

Lua 批量修改文件夹下文件名

local s io.popen("dir C:\\Users\\lizhiyuan\\Desktop\\国家知识产权局ftp法律状态数据\\data /b/s") local filelist s:read("*a")local start_pos 0while 1 do_,end_pos,line string.find(filelist, "([^\n\r].xml)", start_pos)if not e…

VScode 右键菜单加入使用用VSCode打开文件和文件夹【Windows】

VScode 右键菜单加入使用用VSCode打开文件和文件夹【Windows】 介绍修改注册表添加右键打开文件属性修改注册表添加右键打开文件夹属性修改注册表添加右键空白区域属性 介绍 鼠标右击文件或者文件夹&#xff0c;可直接用VSCode打开&#xff0c;非常方便。但如果我们在安装VSCo…

动态规划---子序列问题

一)最长递增子序列: 300. 最长递增子序列 - 力扣&#xff08;LeetCode&#xff09; 算法原理: 1.定义一个状态表示:经验题目要求 dp[i]表示&#xff0c;以i位置为结尾&#xff0c;最长递增子序列的长度 中心思路就是找到以i位置为结尾的所有递增子序列&#xff0c;然后找到递增…

使用Adfind和powerview查询域内特殊的ACL

Adfind 使用adfind查询具备有Dcsync权限的账户 AdFind.exe -s subtree -b "DC=hacktest,DC=com" -sdna nTSecurityDescriptor -sddl+++ -sddlfilter ;;;"Replicating Directory Changes All";; -recmute AdFind.exe -s subtree -b "DC=hacktest,DC…

《Pytorch深度学习和图神经网络(卷 2)》学习笔记——第一章

学习基于如下书籍&#xff0c;仅供自己学习&#xff0c;用来记录回顾&#xff0c;非教程。 <PyTorch深度学习和图神经网络&#xff08;卷2&#xff09;——开发应用>一书配套代码&#xff1a; https://github.com/aianaconda/pytorch-GNN-2nd- 百度网盘链接&#xff1a;…

【有功功率、无功功率】可再生能源配电馈线的鲁棒经济调度研究[IEEE13节点](Matlab代码实现)

&#x1f4a5;1 概述 "有功功率和无功功率" 是与电力系统中能量传输和功率控制相关的两个重要概念。 有功功率&#xff08;Active Power&#xff09;是指电力系统中传输和消耗能量的功率&#xff0c;也被称为实功功率。它负责提供电力系统中的实际电能需求&#xf…

Python使用select模块/asyncio库实现轮询机制

一、轮询机制概念 在操作系统中&#xff0c;用户态轮询机制是一种等待系统中某个资源就绪的方式&#xff0c;它通常用于非阻塞式I/O操作。这种机制允许用户进程在等待I/O操作完成时继续执行其他任务&#xff0c;而不是一直阻塞等待。用户进程可以使用系统调用将I/O操作请求提交…

数学分析:换元详解

这一端文章没有写详细的证明。意思是说n维空间下的k个向量围成的多面体的体积&#xff0c;都可以用公式(3)进行计算。详细证明过程参考&#xff1a;行列式的一种推广 - 知乎 这里简述下过程&#xff1a; 首先要把这n个m维向量进行格拉姆斯密特正交化&#xff0c;得到正交后的…

解决appium-doctor报gst-launch-1.0.exe and/or gst-inspect-1.0.exe cannot be found

一、下载gst-launch-1.0.exe and gst-inspect-1.0.exe 下载地址&#xff1a;Download GStreamer runtime installer 和 development installer 两个应用程序都要下载并安装 二、运行安装 下载好后点击安装会弹出如下界面&#xff0c;点击“更多信息”展开&#xff0c;点击“仍然…

C语言实现计算器简单混合运算

计算器的实现看似简单&#xff0c;其实并不简单。 要求完成功能&#xff1a; 1.实现 - * / 简单运算&#xff1b; 2.可以实现这几个运算符的综合&#xff08;混合&#xff09;运算&#xff1b; 注意&#xff1a;该计算器混合运算中不包含太复杂的运算符&#xff0c;如()&am…

星戈瑞 CY3-Dextran的合成方法和表征

CY3-Dextran是一种荧光染料&#xff0c;可用于细胞标记和显微镜观察。它具有很强的荧光信号和稳定性&#xff0c;可以用于研究细胞生物学和分子生物学。 CY3-Dextran的合成方法涉及将CY3染料与葡聚糖进行共价结合。以下是一种常用的合成方法&#xff1a; 【合成方法】&#xf…

3.1例子---登录窗口1

3.1例子—登录窗口1 这一次效果图是这样的&#xff1a; 界面创建 # welcome image canvas tk.Canvas(window, height200, width500)#创建画布 image_file tk.PhotoImage(filewelcome.gif)#加载图片文件 image canvas.create_image(0,0, anchornw, imageimage_file)#将图…

MySQL数据库第九课--------join连接四件套------不错的哦哦哦

作者前言 欢迎小可爱们前来借鉴我的gtiee秦老大大 (qin-laoda) - Gitee.com ____________________________________________________________________ 目录 SQL查询语句 限定输出 limit 连接查询 join 内连接 左连接 右连接 外连接 ____________________________________…

xxx.indexOf is not a function报错

注意&#xff1a;xxx 如果是数字、布尔、对象&#xff0c;然而indexOf用于查找字符串或数组中的元素&#xff0c;所以会报错。

Qt5.15.2安装

解释一下 Qt 的版本号 比如 5.15.2 是完整的 Qt 版本号&#xff0c;第一个数字 5 是大版本号&#xff08;major&#xff09;&#xff0c;第二个数字 15 是小版本号&#xff08;minor&#xff09;&#xff0c;第三个数字 2 是补丁号&#xff08;patch&#xff09;。 只要前面两个…

Python异步编程框架Tornado使用方法

Tornado简介 Python异步编程框架Tornado是一个轻量级的Web框架和异步网络库&#xff0c;它能够处理大量并发连接和请求&#xff0c;非常适合高并发的网络应用和实时应用。 Tornado基本概念&#xff1a; 协程&#xff1a;Tornado采用协程并发模型&#xff0c;可以让单线程同时…