数据结构实验之链表九:双向链表

Problem Description

学会了单向链表,我们又多了一种解决问题的能力,单链表利用一个指针就能在内存中找到下一个位置,这是一个不会轻易断裂的链。但单链表有一个弱点——不能回指。比如在链表中有两个节点A,B,他们的关系是B是A的后继,A指向了B,便能轻易经A找到B,但从B却不能找到A。一个简单的想法便能轻易解决这个问题——建立双向链表。在双向链表中,A有一个指针指向了节点B,同时,B又有一个指向A的指针。这样不仅能从链表头节点的位置遍历整个链表所有节点,也能从链表尾节点开始遍历所有节点。对于给定的一列数据,按照给定的顺序建立双向链表,按照关键字找到相应节点,输出此节点的前驱节点关键字及后继节点关键字。

Input

第一行两个正整数n(代表节点个数),m(代表要找的关键字的个数)。第二行是n个数(n个数没有重复),利用这n个数建立双向链表。接下来有m个关键字,每个占一行。

Output

对给定的每个关键字,输出此关键字前驱节点关键字和后继节点关键字。如果给定的关键字没有前驱或者后继,则不输出。
注意:每个给定关键字的输出占一行。
           一行输出的数据之间有一个空格,行首、行末无空格。

 

Example Input

10 3
1 2 3 4 5 6 7 8 9 0
3
5
0

Example Output

2 4
4 6
9




#include <stdio.h>
#include <stdlib.h>
struct node
{
    struct node *next,*first;
    int data;
}*head,*tail,*p;
int main()
{
    int m,n,i,j,k;
    head=(struct node *)malloc(sizeof(struct node));
    head->next=NULL;
    tail=head;
    scanf("%d%d",&n,&m);
    for(i=1;i<=n;i++)
    {
        p=(struct node *)malloc(sizeof(struct node));
        p->next=NULL;
        scanf("%d",&p->data);
        p->first=tail;
        p->next=tail->next;
        tail->next=p;
        tail=p;
    }
    p=head->next;
    for(i=1;i<=m;i++)
    {
        scanf("%d",&k);
       p=head->next;
        while(p)
        {
            if(p->data==k)
            {
                if(p->first!=head&&p->next!=NULL)
                   {
                    printf("%d %d\n",p->first->data,p->next->data);
                    break;
                   }
                else if(p->first!=head&&p->next==NULL)
                   {
                    printf("%d\n",p->first->data);
                    break;
                   }
                else if(p->next!=NULL&&p->first==head)
                    {
                        printf("%d\n",p->next->data);
                        break;
                    }
            }
            p=p->next;
        }
    }
    return 0;
}



#include<bits/stdc++.h>
using namespace std;
struct node
{
    struct node *next,*first;
    int data;
}*head,*tail,*p;
int n,m;
node *create(int n)
{
    head=new node;
    head->next=NULL;
    tail=head;
    for(int i=1;i<=n;i++)
    {
        p=new node;
        scanf("%d",&p->data);
        p->first=tail;
   //     p->next=tail->next;
        tail->next=p;
        tail=p;
    }
    return head;
}
void print(node *head,int m)
{
   // p=head->next;
    int k;
    for(int i=1;i<=m;i++)
    {
        cin>>k;
       p=head->next;
        while(p)
        {
            if(p->data==k)
            {
                if(p->first&&p->next)
                   {
                   cout<<p->first->data<<" "<<p->next->data<<endl;
                    break;
                   }
                else if(p->first)
                   {
                    cout<<p->first->data<<endl;
                    break;
                   }
                else if(p->next)
                    {
                        cout<<p->next->data<<endl;
                        break;
                    }
            }
            p=p->next;
        }
    }
}
int main()
{
    cin>>n>>m;
    node *head;
    head=create(n);
    print(head,m);
    return 0;
}


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

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

相关文章

不敢死队问题

Problem Description 说到“敢死队”&#xff0c;大家不要以为我来介绍电影了&#xff0c;因为数据结构里真有这么道程序设计题目&#xff0c;原题如下&#xff1a; 有M个敢死队员要炸掉敌人的一个碉堡&#xff0c;谁都不想去&#xff0c;排长决定用轮回数数的办法来决定哪个战…

槽边往事

http://chuansong.me/account/bitsea?start12

数据结构实验之链表五:单链表的拆分

Problem Description 输入N个整数顺序建立一个单链表&#xff0c;将该单链表拆分成两个子链表&#xff0c;第一个子链表存放了所有的偶数&#xff0c;第二个子链表存放了所有的奇数。两个子链表中数据的相对次序与原链表一致。Input 第一行输入整数N;&#xff1b; 第二行依次输…

聊天机器人调用API实现

后端调用API&#xff1a; package com.mychat.servlet;import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder;…

Dump文件

1. Dump文件 1. Dump文件介绍 Dump文件(Dump File)&#xff0c;也叫转储文件&#xff0c;以.DMP为文件后缀。dump文件是进程在内存中的镜像文件&#xff0c;通过转换然后存储成以.DMP后缀的文件。dump文件根据存储时的选项不同&#xff0c;会生成不同大小的文件&#xff0c;其中…

整理音乐

Problem Description 请用链表完成下面题目要求。 xiaobai 很喜欢音乐&#xff0c;几年来一直在收集好听的专辑。他有个习惯&#xff0c;每次在听完一首音乐后会给这首音乐打分&#xff0c;而且会隔一段时间给打好分的音乐排一个名次。今天 xiaobai 打开自己的音乐文件夹&#…

VS2013正在等待所需操作完成

在用VS2013打开解决方案的时候&#xff0c;遇到”正在等待所需操作完成 &#xff0c;此对话框将在操作完成后关闭“一直弹出显示&#xff0c;解决方案无法加载的情况&#xff01;此时需要将与解决方案名字相同的文件全部相同&#xff08;除解决方案文件除外&#xff09;全部删除…

web聊天室实现

后端&#xff1a; package com.jsx.chat;import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.concurrent.CopyOnWriteArraySet;import javax.websocket.OnClose; imp…

QPSQL driver not loaded

在用qt连接postgreSQL数据库时&#xff0c;出现驱动无法加载的情况&#xff0c;如下图&#xff1a; 代码&#xff1a;mPgDataBase QSqlDatabase::addDatabase("QPSQL"); 如下如下错误&#xff1a; 解决方案&#xff1a; 网上下载”libpq.dll文件“拷贝至运行文件…

一对一聊天ajax实现

前端页面&#xff1a; 好友列表&#xff1a; 好友列表代码&#xff1a; <% page language"java" contentType"text/html; charsetUTF-8"pageEncoding"UTF-8"%> <% page import"java.util.Random" %> <% taglib ur…

选票统计

Problem Description 某校学生会主席由全校学生投票选举产生&#xff0c;共有&#xff4d;名候选人报名参选&#xff0c;编号为1到&#xff4d;&#xff08;0&#xff1c;&#xff4d;&#xff1c;1000&#xff09;&#xff0c;全校有&#xff4e;名学生&#xff08;0&#xff…

“模块计算机类型“x64”与目标计算机类型“X86”冲突解决方案

最近在编译一款开源软件的时候&#xff0c;遇到了“模块计算机类型“x64”与目标计算机类型“X86”冲突的问题&#xff0c;网上查了好多资料&#xff0c;都是配置“链接器-》高级-》目标计算机”和选择X64平台编译器&#xff0c;可是怎么试都不行&#xff0c;最后发现是“命令行…

通用的websocket模板代码

web聊天室后端代码模板: package com.jsx.chat;import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.concurrent.CopyOnWriteArraySet;import javax.websocket.OnClos…

最终排名

Time Limit: 1000MS Memory Limit: 65536KBSubmit StatisticProblem Description 第四届山东理工大学ACM网络编程擂台赛比赛完后需要产生一个最终排名&#xff0c;排名按照题数多少来决定。但是有太多的队伍参与&#xff0c;手动计算排名已经不能满足比赛的需求。现在有一份名单…

windows稀疏文件

稀疏文件(Sparse File), 指的是文件中出现大量的0数据&#xff0c;这些数据对我们用处不大&#xff0c;但是却一样的占用我们的空间&#xff0c;针对此&#xff0c;WINNT 3.51中的NTFS文件系统对此进行了优化&#xff0c;那些无用的0字节被用一定的算法压缩起来&#xff0c;使得…

设置三个线程顺序打印数字问题(转载)

第一种方法&#xff1a;通过共享对象锁的方式实现 记住调用wait方法时候需要在同步代码块内&#xff0c;否则会报java.lang.IllegalMonitorStateException异常&#xff01; package com.test;class Prints {public int num 0;synchronized public void methodA() throws Int…

英文金曲大赛

Problem Description 我们在“渊子数”的题目中已经了解了渊子是个什么样的人了&#xff0c;他在大一的时候参加过工商学院的“英语聚乐部”。告诉你个秘密&#xff0c;这个俱乐部是个好地方&#xff0c;不但活动精彩而且有MM。这不&#xff0c;英语俱乐部举办了一个叫做“英文…

磁盘管理之逻辑卷管理(Logical Volume Manager)

LVM是逻辑卷管理&#xff08;Logical Volume Manager&#xff09;的简称&#xff0c;它是建立在物理存储设备之上的一个抽象层&#xff0c;允许你生成逻辑存储卷,与直接使用物理存储在管理上相比,提供了更好灵活性。 LVM将存储虚拟化,使用逻辑卷,你不会受限于物理磁盘的大小,另…