浙江中医药大学-线性表算法设计题

原创 2017年01月03日 21:00:52
ZCMU-Data Structure-Linear List
1、已知两个链表A和B分别表示两个集合,元素递增排列。设计算法求出A与B的交集,并存放于A链表中。(本部)

思路:只有同时出现在两集合中的元素才出现在结果表中,合并后的新表使用头指针Lc指向。pa和pb分别是链表La和Lb的工作指针,初始化为相应链表的第一个结点,从第一个结点开始进行比较,当两个链表La和Lb均为到达表尾结点时,如果两个表中相等的元素时,摘取La表中的元素,删除Lb表中的元素;如果其中一个表中的元素较小时,删除此表中较小的元素,此表的工作指针后移。当链表La和Lb有一个到达表尾结点,为空时,依次删除另一个非空表中的所有元素。

void Mix(LinkList& La, LinkList& Lb, LinkList& Lc) 
{  pa=La->next;pb=Lb->next; 
//pa和pb分别是链表La和Lb的工作指针,初始化为相应链表的第一个结点
Lc=pc=La; //用La的头结点作为Lc的头结点
while(pa&&pb)
{ if(pa->data==pb->data)∥交集并入结果表中。
   { pc->next=pa;pc=pa;pa=pa->next;
     u=pb;pb=pb->next; delete u;}
  else if(pa->data<pb->data) {u=pa;pa=pa->next; delete u;}
else {u=pb; pb=pb->next; delete u;}
}
while(pa) {u=pa; pa=pa->next; delete u;}∥ 释放结点空间
while(pb) {u=pb; pb=pb->next; delete u;}∥释放结点空间
pc->next=null;∥置链表尾标记。
delete Lb;  //释放Lb的头结点
2、设计算法将一个带头结点的单链表A分解为两个具有相同结构的链表B、C,其中B表的结点为A表中值小于零的结点,而C表的结点为A表中值大于零的结点(链表A中的元素为非零整数,要求B、C表利用A表的结点)。

思路:B表的头结点使用原来A表的头结点,为C表新申请一个头结点。从A表的第一个结点开始,依次取其每个结点p,判断结点p的值是否小于0,利用前插法,将小于0的结点插入B表,大于等于0的结点插入C表。

void DisCompose(LinkedList A)
{    B=A;
     B->next= NULL;    ∥B表初始化
     C=new LNode;∥为C申请结点空间
     C->next=NULL;     ∥C初始化为空表
     p=A->next;        ∥p为工作指针
     while(p!= NULL)
     { r=p->next;      ∥暂存p的后继
       if(p->data<0)
        {p->next=B->next; B->next=p; }∥将小于0的结点链入B表,前插法
       else {p->next=C->next; C->next=p; }∥将大于等于0的结点链入C表,前插法
       p=r;∥p指向新的待处理结点。
     }
}
3、设计一个算法,通过遍历一趟,将链表中所有结点的链接方向逆转,仍利用原表的存储空间。
思路:从首元结点开始,逐个地把链表L的当前结点p插入新的链表头部

void  inverse(LinkList &L) 
{// 逆置带头结点的单链表 L
    p=L->next;  L->next=NULL;
    while ( p) {
        q=p->next;    // q指向*p的后继
        p->next=L->next;
        L->next=p;       // *p插入在头结点之后
        p = q;
    }
}

4、统计出不带表头的单链表HL中结点的值等于给定值X的结点数,写出实现算法。(滨江)

int CountX(lklist * HL,ElemType x)
{  
int i=0;
LNode* p=HL;//i为计数器
while(p!=NULL) {
if (P->data==x) i++;
p=p->next;
}//while, 出循环时i中的值即为x结点个数
return i;
}//CountX




版权声明:本文为博主原创文章,未经博主允许不得转载。

参加浙江中医药大学第十一届程序设计竞赛(ACM赛制)的总结

前言2017.12.10,浙江中医药大学主办了一场acm赛制的比赛(浙江中医药大学第十一届程序设计竞赛),而我和我们学校(杭州二中白马湖学校)的另外两名同学组成一队也去参加了,这是我打的第一场acm比...
  • zhouyuheng2003
  • zhouyuheng2003
  • 2017年12月10日 20:01
  • 422

1065 浙江中医药大学ACM OJ

哈哈哈哈哈,时隔多年,又AC了一道题小小的嘚瑟下,让自己有动力去AC下一道题, 今天就要蓝桥杯选拔赛了呢,小小的激动了一把,虽然我还比较渣,但谁也不能阻止我成长 进入正题: ...
  • izhouxiaofei
  • izhouxiaofei
  • 2015年12月13日 14:21
  • 1587

第二章:线性表算法设计题(9-10)

问题描述:   (9)交换双向链表中的第i个结点和其前面一个结点的位置;   (10)删除顺序表中值为x的结点;   代码: #include #include #define ER...
  • Songjs19931206
  • Songjs19931206
  • 2015年01月05日 12:59
  • 429

浙江中医药大学-《数据结构》-栈和队列算法设计

浙江中医药大学-《数据结构》-栈和队列算法设计
  • xiamu610
  • xiamu610
  • 2017年01月04日 19:27
  • 180

【2017年浙江中医药大学大学生程序设计竞赛】F 开心的cc 【线段树+思维】

时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其他语言262144K 64bit IO Format: %lld 题目描述 CC is a smart gir...
  • qq_37383726
  • qq_37383726
  • 2017年12月21日 20:02
  • 157

OJ_1048

#include using namespace std; void swap(int &a,int &b) { int temp=a; a=b; b=temp; }...
  • jerryzcx
  • jerryzcx
  • 2014年02月16日 09:37
  • 245

2017年浙江中医药大学大学生程序设计竞赛-A:不存在的树(树链剖分)

2017年浙江中医药大学大学生程序设计竞赛-A:不存在的树(树链剖分)kotomi 有一棵树。树上有n个房子,编号1-n,每个房子有一个快乐值。 kotomi想知道从a房子到b房子路径上的最大快乐值或...
  • Mitsuha_
  • Mitsuha_
  • 2017年12月20日 13:12
  • 171

浙江中医药大学-《数据结构》-串、数组算法设计

浙江中医药大学-《数据结构》-串、数组算法设计
  • xiamu610
  • xiamu610
  • 2017年01月04日 20:05
  • 826

2017年浙江中医药大学大学生程序设计竞赛

题目链接 B 一生之敌 2*a*(a+1)^2 = b^2   因为要求b 所以先开个根号把b求出来 => b = sqrt(2*a)  * (a+1) ...
  • w326159487
  • w326159487
  • 2017年12月21日 20:44
  • 75

【2017年浙江中医药大学大学生程序设计竞赛(重现赛)】A B E F G

A 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 131072K,其他语言262144K 64bit IO Format: %lld 题目描述 kotomi 有一棵树。树上有...
  • qq_37383726
  • qq_37383726
  • 2017年12月21日 19:45
  • 108
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:浙江中医药大学-线性表算法设计题
举报原因:
原因补充:

(最多只允许输入30个字)