Problem B: 子序列问题(线性表)
来源:互联网 发布:淘宝店铺会员管理 编辑:程序博客网 时间:2024/05/22 03:41
Problem B: 子序列问题(线性表)
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 300 Solved: 190
[Submit][Status][Web Board]
Description
两个整数序列A=a1,a2,a3,…,am和B=b1,b2,b3,…,bn已经存入两个单链表中,设计一个算法,判断序列B是否是序列A的子序列,代码给出如下,请修改~
本题只需提交修改部分
#include<stdio.h>
#include<malloc.h>
struct node //定义结构体
{
int data;
struct node *next;
};
struct node *creat(int n)
{
struct node *head,*p,*q; //head是头节点,p指向新开辟的节点,q指向已连接的上一个节点
head=(struct node *)malloc(sizeof(struct node));//给head开辟一个节点
q = head; //q节点连接到head上
while(n--) //开辟n个新节点,逐个连到链表上
{
p=(struct node *)malloc(sizeof(struct node));
scanf("%d",&p->data);//p该连在q后边吧?
q->next = p;
q = p;
}
q->next = NULL;//链表结束
return head;
}
void destroy(struct node *head)
{
struct node *p;
while(head!=NULL)
{
p=head->next;
delete(head);
head=p;
}
}
int main()//建两条链表p,q
{
int m,n,count=0;
struct node *head1,*head2,*p,*q;
scanf("%d",&m);
head1 = creat(m);
scanf("%d",&n);
head2 = creat(n);
q=head2->next;
p = head1->next;
while(q != NULL) //双循环判断p是否是q的子列
{
while(p!=NULL)
{
/***修改代码******/
if(q->data == p->data)
{
count++;
}
else
p = p->next;
/***********************/
}
if(p != NULL)
q = q->next;
else
break;
}
if(count == n)
printf("yes\n");
else
printf("no\n");
destroy(p);
destroy(q);
return 0;
}
Input
一个整数m,表示A序列的长度m。
m个数表示A序列中的m个数据元素。
一个整数n,表示B序列的长度n。
n个数表示B序列中的n个数据元素。
Output
yes 或者 no
Sample Input
912 13 14 15 6 71 18 19 10515 6 71 18 19
Sample Output
yes
HINT
#include<stdio.h>#include<malloc.h>struct node //定义结构体{ int data; struct node *next;};struct node *creat(int n){ struct node *head,*p,*q; //head是头节点,p指向新开辟的节点,q指向已连接的上一个节点 head=(struct node *)malloc(sizeof(struct node));//给head开辟一个节点 q = head; //q节点连接到head上 while(n--) //开辟n个新节点,逐个连到链表上 { p=(struct node *)malloc(sizeof(struct node)); scanf("%d",&p->data);//p该连在q后边吧? q->next = p; q = p; } q->next = NULL;//链表结束 return head;}int main()//建两条链表p,q{ int m,n,count=0; struct node *head1,*head2,*p,*q; scanf("%d",&m); head1 = creat(m); scanf("%d",&n); head2 = creat(n); q=head2->next; p = head1->next; while(q != NULL) //双循环判断p是否是q的子列 { while(p!=NULL) { if(q->data == p->data) { count++;break; } else p= p->next; } if(p != NULL) q = q->next; else break; } if(count == n) printf("yes\n"); else printf("no\n"); return 0;}
- Problem B: 子序列问题(线性表)
- 数据结构—Problem B: 子序列问题(线性表)
- 最大子序列问题,递归和线性
- 最大子序列和问题的解(线性时间)
- 求解最大子序列和问题的线性时间算法
- 最长公共子序列问题 Longest Common Subsequence problem
- uva101The Blocks Problem积木问题,线性表
- Problem B: 调整表中元素顺序(线性表)
- DP 动态规划 Problem B 1002 求最长上升子序列的长度
- Problem B: 动态规划基础题目之最长上升子序列
- 问题 F: Problem B
- 最长递增子序列B
- 最长递增子序列B
- 子序列、子串问题
- 【编程学习】最大子序列和问题-经典-online线性算法
- 线性动态规划——解最长公共子序列问题
- POJ-1458 Common Subsequence(线性动规,最长公共子序列问题)
- 最大子序列和线性算法
- 快捷键_整合
- codevs1022覆盖(二分图最大匹配)
- 用Git管理文件
- C++类的继承的基本认识
- 浅析C++多态及其实现模式
- Problem B: 子序列问题(线性表)
- 使用类图表示你的设计模式——适配器模式!
- 异常聚合方法
- C语言基础 输出一维整型数组中的一个元素
- AndroidStudio ---设备OFFINE,在开发环境识别异常
- Problem C: 查找【数组】
- Problem D: C++习题-快速排序 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 395 Solved: 169 [Submit][Stat
- C语言基础 定义一维字符型数组并初始化
- 爆搜。。。。。。。