《数据结构题集》参考答案2线性表
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数据结构题集》参考答案2线性表
第二章线性表
◆2.11②设顺序表L中的数据元素递增有序。
试写一算法,将x插入到L的适当位置上,并保
持该表的有序性。
要求实现下列函数:
void InsertOrderList(SqList &L, ElemType x)
/* 在有序的顺序表 L 中保序插入数据元素 x */
顺序表类型定义如下:
typedef struct {
ElemType *elem;
int length;
int listsize;
} SqList;
void InsertOrderList(SqList &L, ElemType x)
// 在有序的顺序表 L 中保序插入数据元素 x
{
int j,i=L.length-1;
while (x<l.elem[i]&&i>=0) i--;</l.elem[i]&&i>
for (j=L.length-1;j>i;j--)
{
L.elem[j+1]=L.elem[j];
}
L.elem[i+1]=x;
L.length++;
}
◆2.12③设A=(a1,…,am)和B=(b1,…,bn)均为有序顺序表,A'和B'分别为A和B中除去最大共同前缀后的子表(例如,A=(x,y,y,z,x,z),B=(x,y,y,z,y,x,x,z),则两者中最大
的共同前缀为(x,y,y,z),在两表中除去最大共同前缀后
的子表分别为A'=(x,z)和B'=(y,x,x,z))。若A'=B'=空表,则A=B;若A'=空表,而B'≠空表,或者两者均不为空表,且A'的首元小于B'的首元,则AB。试写一个比较A和B大小的算法。(注意:在算法中,不要破坏原表A
和B,也不一定先求得A'和B'才进行比较)。
要求实现下列函数:
char Compare(SqList A, SqList B);
/* 比较顺序表A和B, */
/* 返回'<', 若A<="" p="">
/* '=', 若A=B; */
/* '>', 若A>B */
顺序表类型定义如下:
typedef struct {
ElemType *elem;
int length;
int listsize;
} SqList;
char Compare(SqList A, SqList B)
// 比较顺序表A和B,
// 返回'<', 若A<b;< p="">
// '=', 若A=B;
// '>', 若A>B
{
int i=0,j=0;
while (i<a.length||j<b.length)< p="">
{
if (A.elem[i]!=B.elem[j])
{
if (A.elem[i]<';="" else="" return="">';
}
else
{
i++;
j++;
}
}
if (i==j) return '=';
else
if (i==A.length) return '<';
else return '>';
}
2.13②试写一算法在带头结点的单链表结构上实现线性表操作Locate(L,x)。
实现下列函数:
LinkList Locate(LinkList L, ElemType x);
// If 'x' in the linked list whose head node is pointed // by 'L', then return pointer pointing node 'x',
// otherwise return 'NULL'
单链表类型定义如下:
typedef struct LNode {
ElemType data;
struct LNode *next;
} LNode, *LinkList;
LinkList Locate(LinkList &L, ElemType x)
// If 'x' in the linked list whose head node is pointed // by 'L', then return pointer ha pointing node 'x',
// otherwise return 'NULL'
{
LinkList P;
P=L->next;
while (P!=NULL&&P->data!=x)
{P=P->next;}
return P;
}
2.14②试写一算法在带头结点的单链表结构上实现线性表操作Length(L)。
实现下列函数:
int Length(LinkList L);
// Return the length of the linked list
// whose head node is pointed by 'L'
单链表类型定义如下:
typedef struct LNode{
ElemType data;
struct LNode *next;
} LNode, *LinkList;
int Length(LinkList L)
// Return the length of the linked list
// whose head node is pointed by 'L'
{
int i=0;
LinkList P;
P=L->next;
while (P!=NULL)
{
P=P->next;
i++;
}
return i;
}