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

原创 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




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

相关文章推荐

链表003

题目如下 -设计算法, 通过遍历一趟, 将链表中所有结点的链接方向逆转(使用原表存储空间)...

反转链表

将原链表逆序后输出。 #include using namespace std; typedef struct NODE { int data; NODE *next; }Node; //链表...

已知两个链表A和B分别表示两个集合,其元素递增排列。请设计算法求出两个集合A和B的差集(即仅由在A中出现而不在B中出现的元素所构成的集合),并以同样的形式存储,同时返回该集合的元素个数。

已知两个链表A和B分别表示两个集合,其元素递增排列。请设计算法求出两个集合A和B的差集(即仅由在A中出现而不在B中出现的元素所构成的集合),并以同样的形式存储,同时返回该集合的元素个数。      ...
  • Gongxs7
  • Gongxs7
  • 2016年11月06日 17:14
  • 2609

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

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

山东中医药大学数据结构第二章线性表

2.1 线性表的逻辑结构 2.1.1线性表的定义 线性表(linear list) 简称表,是n(n≥0)个具有相同类型的数据元素的有限序列,线性表的数据元素的个数称为线性表的长度。 2.1.2...

浙江中医药大学-Data Structure 笔试期末复习(判断题)

浙江中医药大学-数据结构与算法 笔试试题判断题概念整理

浙江中医药大学-《数据结构》(C语言版)-第一章-第二章概念与代码

浙江中医药大学-2015数据结构与算法-绪论与线性表概念、代码

浙江中医药大学-《数据结构》(C语言版)-栈、队列、串、数组

浙江中医药大学-《数据结构》(C语言版)-栈、队列、串、数组

算法设计题2.15-线性表-第2章-《数据结构习题集》-严蔚敏吴伟民版

算法设计题2.15-线性表-第2章-《数据结构习题集》-严蔚敏吴伟民版。

算法设计题2.24-线性表-第2章-《数据结构习题集》-严蔚敏吴伟民版

算法设计题2.24-线性表-第2章-《数据结构习题集》-严蔚敏吴伟民版。
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:浙江中医药大学-线性表算法设计题
举报原因:
原因补充:

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