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

这篇具有很好参考价值的文章主要介绍了数据结构01-线性结构-链表栈队列-栈篇。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

数据结构01-线性结构-链表栈队列-栈篇,信息学奥赛03-数据结构,数据结构,链表

参考:

线性结构-栈

总结

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

大纲要求

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

线性结构-栈

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

栈的数据必须从栈顶进入,也必须从栈顶取出,先入栈的数据在后入栈的数据下面。
栈中不含有任何数据时的状态叫作空栈,此时栈顶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;
}

数据结构01-线性结构-链表栈队列-栈篇,信息学奥赛03-数据结构,数据结构,链表

小猫钓鱼的故事

#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;
}

数据结构01-线性结构-链表栈队列-栈篇,信息学奥赛03-数据结构,数据结构,链表文章来源地址https://www.toymoban.com/news/detail-579406.html

到了这里,关于数据结构01-线性结构-链表栈队列-栈篇的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数据结构-链表-01】反转链表

    💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学习,不断总结,共同进步,活到老学到老 导航 檀越剑指大厂系列:全面总

    2024年02月10日
    浏览(44)
  • 数据结构,队列,顺序表队列,链表队列

            队列是一种常见的数据结构,它具有先进先出(First-In-First-Out,FIFO)的特性,类似于排队等候的场景。以下是队列的要点: 1. 定义:队列是一种线性数据结构,由一系列元素组成,可以进行插入和删除操作。插入操作(称为入队)只能在队列的末尾进行,删除操

    2024年02月11日
    浏览(41)
  • 数据结构-线性表-链表

    线性表的定义:由n(n=0)个数据特性相同的元素构成的有限序列,称为线性表。 初始化只需要把头节点的next给进行初始化即可,data数据直接放空,变成头结点方便下面的数据操作。 也可以理解为放弃一部分空间,提高程序运行速度。

    2024年02月08日
    浏览(31)
  • 【数据结构】栈和队列(链表模拟队列)

      学习本章节必须具备 单链表的前置知识, 建议提前学习:点击链接学习:单链表各种功能函数 细节 详解 本章节是学习用 单链表模拟队列 1. 单链表实现队列 思路如下 队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先 进先出

    2024年04月27日
    浏览(43)
  • 数据结构:线性表(队列实现)

    队列:只允许在一端进行插入数据操作,在另一端进行删除操作的特殊线性表,队列具有先进先出(FIFO)的特性. 进行插入操作的一端称为 队尾 ;进行删除操作的一端叫做 队头 队列应用于 解决公平性排队(抽号机) 广度优先遍历(BFS) 和栈一样,队列也可以使用两种物理结构进行存储

    2024年02月09日
    浏览(36)
  • 【数据结构】线性表之链表

    上一篇文章讲述了线性表中的顺序表,这篇文章讲述关于链表的定义、类别、实现、多种不同链表的优缺点和链表与顺序表的优缺点。 关于上一篇文章的链接:线性表之顺序表 链表是一种物理存储结构上 非连续、非顺序 的存储结构,数据元素的逻辑顺序是通过链表中的指针

    2024年02月05日
    浏览(59)
  • Python数据结构与算法-数据结构(列表、栈、队列、链表)

    数据结构是指相互之间存在这一种或者多种关系的数据元素的集合和该集合中元素之间的关系组成。 简单来说,数据结构就是设计数据以何种方式组织并存储在计算机中。 比如:列表、集合与字典等都是一种数据结构。 N.Wirth:“程序=数据结构+算法” 数据结构按照其 逻辑结

    2024年02月08日
    浏览(58)
  • 线性数据结构:数组、受限数组(栈、队列)、线性表

      数组(Array)是有序的元素序列。属于线性结构(有且仅有一个前驱、有且仅有一个后继)。   数组的关键在于在内存中的物理地址对应的是 一段连续的内存 。这意味着如果想要在任意位置删除/新增一个元素,那么该位置往后的所有元素,都需要往前挪/往后挪一个位

    2024年03月09日
    浏览(53)
  • 【数据结构与算法_01_线性表】线性表

    定义 ● 线性表 具有相同数据类型**(同类型)**的n个数据元素有限序列 ● 三方面 ● 定义 逻辑结构 ● 相同数据类型 ● 每个数据元素所占的空间相同 ● 有限 ● 有限个元素 ● 序列 ● 是有次序的 ● 基本操作 操作— 基本操作 运算 ● 创建线性表【initList(L)】 ● 初始化线

    2024年02月11日
    浏览(37)
  • 【数据结构】线性表之栈、队列

    前面两篇文章讲述了关于线性表中的顺序表与链表,这篇文章继续讲述线性表中的 栈和队列。 这里讲述的两种线性表与前面的线性表不同,只允许在一端入数据,一段出数据,详细内容请看下面的文章。 顺序表与链表两篇文章的链接: 线性表之顺序表 线性表之链表 注意:

    2024年02月06日
    浏览(62)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包