pta实验——《一般线性表的应用》答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
pta实验——《一般线性表的应用》答案
6-1 顺序表的删除操作 (8分)
本题要求实现一个函数,要求将顺序表的第i个元素删掉,成功删除返回1,否则返回0;函数接口定义:
int ListDelete(SqList &L,int i);
其中SqList结构定义如下:
typedef struct{
ElemType *elem;
int length;
}SqList;
裁判测试程序样例:
#include
#include
#define MAXSIZE 5
typedef int ElemType;
typedef struct{
ElemType *elem;
int length;
}SqList;
void InitList(SqList &L);/*细节在此不表*/
int ListDelete(SqList &L,int i);
int main()
{
SqList L;
InitList(L);
int i;
scanf("%d",&i);
int result=ListDelete(L,i);
if(result==0){
printf("Delete Error.The value of i is illegal!");
}else if(result==1){
printf("Delete Success.The elements of the SequenceList L are:");
for(int j=0;j<l.length;j++){< bdsfid="95" p=""></l.length;j++){<>
printf(" %d",L.elem[j]);
}
}
return0;
}
/* 请在这里填写答案 */
输入格式:
输入数据有1行,首先给出以-1结束的顺序表元素值(不超过100个,-1不属于顺序表元素),然后是删除位置。
所有数据之间用空格分隔。
输入样例:
2 6 4 -1 1
输出样例:
Delete Success.The elements of the SequenceList L are: 6 4 作者
DS课程组
单位
临沂大学
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
答案:
int ListDelete(SqList &L,int i)
{
if(i<1||i>L.length) return0;
for(int j=i-1;j
L.length--;
return1;
}
6-2 顺序表的查找操作 (7分)
本题要求实现一个函数,要求从顺序表中查找指定元素,并返回第一个查找成功的元素在表中的位置序号,若查找失败,则返回0;
函数接口定义:
int LocateElem(SqList L,ElemType e);
其中SqList结构定义如下:
typedef struct{
ElemType *elem;
int length;
}SqList;
裁判测试程序样例:
#include
#include
#define MAXSIZE 5
typedef int ElemType;
typedef struct{
ElemType *elem;
int length;
}SqList;
void InitList(SqList &L);/*细节在此不表*/
int LocateElem(SqList L,ElemType e);
int main()
{
SqList L;
InitList(L);
ElemType e;
int p;
scanf("%d",&e);
p=LocateElem(L,e);
printf("The position of %d in SequenceList L is %d.",e,p);
return0;
}
/* 请在这里填写答案 */
输入格式:
输入数据有1行,首先给出以-1结束的顺序表元素值(不超过100个,-1不属于顺序表元素),然后是待查找的元素值。
所有数据之间用空格分隔。
输入样例:
2 6 4 9 1
3 -1 2
输出样例:
The position of 2 in SequenceList L is 1.
作者
DS课程组
单位
临沂大学
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
int LocateElem(SqList L,ElemType e)
{
for(int i=0;i<l.length;i++)< bdsfid="182" p=""></l.length;i++)<>
{
if(L.elem[i]==e) return i+1;
}
return0;
}
6-3 顺序表的有序插入操作 (10分)
本题要求实现一个函数,要求将指定元素插入到有序表的合适位置,使得插入后仍然保持有序,若插入失败返回0;插入成功则返回1,并且顺序表的长度加1.
函数接口定义:
int SqInsert(SqList &L,ElemType e);
其中SqList结构定义如下:
typedef struct{
ElemType *elem;
int length;
}SqList;
裁判测试程序样例:
#include
#include
#include
#define MAXSIZE 5
typedef int ElemType;
typedef struct{
ElemType *elem;
int length;
void InitList(SqList &L);/*函数的实现此处不再显示*/
int SqInsert(SqList &L,ElemType e);
int main()
{
SqList L;
InitList(L);
ElemType e;
scanf("%d",&e);
int result=SqInsert(L,e);
if(result==0){
printf("Insertion Error.The storage space is full!");
}else if(result==1){
printf("Insertion Success.The elements of the SequenceList L are:");
for(int j=0;j<l.length;j++){< bdsfid="224" p=""></l.length;j++){<>
printf(" %d",L.elem[j]);
}
}
return0;
}
/* 请在这里填写答案 */
输入格式:
输入数据有1行,首先给出以-1结束的非递减顺序表元素值(不超过100个,-1不属于顺序表元素,),然后是被插入元素值。
所有数据之间用空格分隔。
输入样例:
4 8 20 -1 10
输出样例:
Insertion Success.The elements of the SequenceList L are: 4 8 10 20
作者
DS课程组
单位
临沂大学
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
答案:
int SqInsert(SqList &L,ElemType e)
{
if(L.length==MAXSIZE) return0;
if(L.length==0) L.elem[0]=e,L.length++;
if(L.length==1) if(e>=L.elem[0]) L.elem[1]=e,L.length++;else L.elem[1]=L.elem[0],L.elem[0]=e,L.length++;
for(int i=0;i<l.length-1;i++)< bdsfid="254" p=""></l.length-1;i++)<>
{
if((L.elem[i]<=e&&L.elem[i+1]>=e)||(!i&&L.elem[i]>e))
{
if(!i&&L.elem[i]>e) i--;
for(int j=L.length;j>i+1;j--) L.elem[j]=L.elem[j-1];
L.elem[i+1]=e;
L.length++;
return1;
}
}
L.elem[L.length++]=e;
return1;
}
6-4 带头结点的单链表插入操作 (10分)
本题要求实现带头结点的单链表插入操作,插入成功返回1,否则返回0。
函数接口定义:
int insert_link ( LinkList L,int i,ElemType e);
L是单链表的头指针,i为插入位置,e是插入的数据元素,插入成功返回1,否则返回0。
裁判测试程序样例:
#include
#include
typedef int ElemType;
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
LinkList Create();/* 细节在此不表 */
void print( LinkList L);
int insert_link ( LinkList L,int i,ElemType e);
int main()
{
int position,insert_data;int flag;
LinkList L = Create();
scanf("%d",&position);
scanf("%d",&insert_data);
flag=insert_link(L,position,insert_data);
if(flag)
{
print(L);
}
else
{
printf("Wrong Position for Insertion");
}
return0;
}
void print(LinkList L)
{
LinkList p;
p=L->next;
while (p)
{
printf("%d ", p->data);
p =p->next;
}
}
/* 请在这里填写答案 */
输入格式:
输入数据为三行,第一行是若干正整数,最后以-1表示结尾(-1不算在序列内,不要处理)。
所有数据之间用空格分隔。
第二行数据是插入位置,第三行数据是被插入元素值。
输入样例:
1 2 3 4 5 6 -1
2
100
输出样例:
1 100
2
3
4
5 6
作者
DS课程组
单位
临沂大学
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
答案:
int insert_link ( LinkList L,int i,ElemType e) {
LinkList p=L->next,x,pre=L;int j=1;
if(i==1)
{
x=(LinkList)malloc(sizeof(LNode));x->data=e; pre->next=x;x->next=p;
return1;
}
while(p)
{
if(i==j)
{
x=(LinkList)malloc(sizeof(LNode));x->data=e; pre->next=x;x->next=p;
return1;
}
pre=p;p=p->next;j++;
}
if(i==j)
{
x=(LinkList)malloc(sizeof(LNode));x->data=e;
pre->next=x;x->next=p;
return1;
}
return0;
}
6-5 带头结点的单链表删除操作 (10分)
本题要求实现删除单链表的第i个元素结点,删除成功返回1,否则返回0。
函数接口定义:
int delete_link ( LinkList L,int i);
L为单链表的头指针,i为删除结点的序号
裁判测试程序样例:
#include
#include
typedef int ElemType;
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
LinkList Create();/* 细节在此不表 */
void print( LinkList L);
int delete_link ( LinkList L,int i);
int main()
{
LinkList L = Create();
int position;int flag;
scanf("%d",&position);
flag=delete_link(L,position);
if(flag)
{
print(L);
}
else
{
printf("Wrong Position for Deletion");
}
return0;
}
void print(LinkList L)
{
LinkList p;
p=L->next;
while (p)
{
printf("%d ", p->data);
p =p->next;
}
}
/* 请在这里填写答案 */
输入格式:
输入数据为两行,第一行是若干正整数,最后以-1表示结尾(-1不算在序列内,不要处理)。
所有数据之间用空格分隔。
第二行数据是删除位置。
输入样例:
1 2 3 4 5 6 -1
3
输出样例:
1 2 4 5 6
作者
DS课程组
单位
临沂大学
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
答案:
int delete_link ( LinkList L,int i) {
LinkList p=L;int j=1;
if(i<1) return0;
while(p->next)
{
if(i==j){
p->next=p->next->next;return1; }
p=p->next;j++;
}
return0;
}
6-6 链式表的按序号查找 (10分)
本题要求实现一个函数,找到并返回链式表的第K个元素。
函数接口定义:
ElementType FindKth( List L, int K );
其中List结构定义如下:
typedef struct LNode *PtrToLNode;
struct LNode {
ElementType Data;
PtrToLNode Next;
};
typedef PtrT oLNode List;
L是给定单链表,函数FindKth要返回链式表的第K个元素。
如果该元素不存在,则返回ERROR。
裁判测试程序样例:
#include
#include
#define ERROR -1
typedef int ElementType;
typedef struct LNode *PtrToLNode;
struct LNode {
ElementType Data;
PtrToLNode Next;
};
typedef PtrT oLNode List;
List Read(); /* 细节在此不表 */
ElementType FindKth( List L, int K );
int main()
{
int N, K;
ElementType X;
List L = Read();
scanf("%d", &N);
while ( N-- ) {
scanf("%d", &K);
X = FindKth(L, K);
if ( X!= ERROR )
printf("%d ", X);
else
printf("NA ");
}
return0;
}
/* 你的代码将被嵌在这里 */ 输入样例:
1 3 4 5
2 -1
6
3 6 1 5
4 2
输出样例:
4 NA 1 2
5 3
作者
陈越
单位
浙江大学
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
答案:
ElementType FindKth( List L, int K )
{
List p=L;int i=1;
while(p)
{
if(i==K) return p->Data;
p=p->Next;i++;
}
return ERROR;
}
6-7 求单链表的表长 (10分)
本题要求实现一个函数,求带头结点的单链表的表长。
函数接口定义:
int Length ( LinkList L );
其中LinkList结构定义如下:
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
L是带头结点的单链表的头指针,函数Length返回单链表的长度。
裁判测试程序样例:
#include
#include
typedef int ElemType;
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
LinkList Create();/* 细节在此不表 */ int Length ( LinkList L ); int main()
{
LinkList L = Create();
printf("%d\n", Length(L));
return0;
}
/* 你的代码将被嵌在这里 */
输入样例:
2 1 4 5
3 -1
输出样例:
5
作者
DS课程组
单位
临沂大学
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
答案:
int Length ( LinkList L )
LinkList p=L->next;int i=0;
while(p)
{
p=p->next;i++;
}
return i;
}
6-8 统计单链表大于指定值的元素个数 (10分)
本题要求实现一个函数,可统计带头结点的单链表中大于指定值的元素个数。
函数接口定义:
int GetLarger( LinkList L,ElemType e );
L是带头结点的单链表的头指针,e是要比较的元素值。
函数GetUp返回单链表中大于e 的元素个数;没有,则返回0。
裁判测试程序样例:
#include
#include
typedef int ElemType;
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
LinkList Create();/* 细节在此不表 */
int GetLarger( LinkList L, ElemType e);
int main()
ElemType e;
LinkList L = Create();
scanf("%d",&e);
printf("%d\n", GetLarger(L,e));
return0;
}
LinkList Create()
{
LinkList L,r,p;
ElemType e;
L = (LinkList)malloc(sizeof(LNode));
L->next = NULL;
r = L;
scanf("%d",&e);
while(e!=-1)
{
p = (LinkList)malloc(sizeof(LNode));
p->data = e;
p->next = r->next;
r->next = p;
r = p;
scanf("%d",&e);
}
return L;
}
/* 你的代码将被嵌在这里 */
输入格式:
输入数据有2行,第一行给出以-1结束的单链表元素(-1不属于单链表元素),所有数据之间用空格分隔。
第二行给出指定的元素值。
输入样例:
4 1 2
5 7 -1
3
输出样例:
3。