-
6-2 顺序表基本操作 (50 分)
实现顺序表的基本操作,如初始化、插入、删除、输出等。 注意:顺序表中可有重复元素值。 要求:写出三个基本操作函数ListInsert,ListDelete,ListDeleteElem。
顺序表结构与操作函数接口定义:
typedef char ElemType; typedef struct //定义顺序表结构 { ElemType data[MaxSize]; int length; } SqList; void InitList(SqList *&L); //初始化线性表 void DestroyList(SqList *&L); //销毁线性表 void DispList(SqList *L); //顺序输出顺序表元素值。 bool ListInsert(SqList *&L,int i,ElemType e); //在第i位上插入一个元素e,插入成功时返回true,否则返回false. bool ListDelete(SqList *&L,int i,ElemType &e); //删除第i个结点, 返回删除的元素值e,且删除成功时返回true,否则返回false bool ListDeleteElem(SqList *&L,ElemType e); //删除所有元素值为e的结点,删除成功时返回true,否则返回false
裁判测试程序样例:
#include <stdio.h> #include <malloc.h> #define MaxSize 10000 typedef char ElemType; typedef struct { ElemType data[MaxSize]; int length; } SqList; void InitList(SqList *&L); //初始化线性表,裁判程序实现,略去不表。 void DestroyList(SqList *&L); //销毁线性表,裁判程序实现,略去不表。 void DispList(SqList *L); //顺序输出顺序表元素值。每个结点元素值以空格符间隔,裁判程序实现,略去不表。 bool ListInsert(SqList *&L,int i,ElemType e); //在第i位上插入一个元素e,插入成功时返回true,插入不成功时返回false. 其中:i为顺序表的逻辑序号。 bool ListDelete(SqList *&L,int i,ElemType &e); //在第i个结点上删除一个元素, 返回删除的元素值e,且删除成功时返回true,删除不成功返回false。其中:i为顺序表的逻辑序号。 bool ListDeleteElem(SqList *&L,ElemType e); //删除元素值为e的结点,删除成功时返回true,删除 不成功返回false。 int main() { SqList *L; ElemType e,ch; int i=1; InitList(L); while((ch=getchar())!='\n') { ListInsert(L,i,ch); //在L的第i个结点位置上插入ch i++; } DispList(L); scanf("\n%d %c",&i,&ch); ListInsert(L,i,ch); DispList(L); scanf("\n%d",&i); if(ListDelete(L,i,e)) // 删除L的第i个结点 { printf("delete %dth: %c\n",i,e); DispList(L); if(ListDeleteElem(L,e)) // 删除元素值为e的结点 printf("delete \'%c\' \n",e); else printf("delete \'%c\' failed!\n",e); } else printf("delete %dth failed!\n"); DispList(L); DestroyList(L); } void InitList(SqList *&L) //裁判程序实现,略去不表。 {... } void DestroyList(SqList *&L) //裁判程序实现,略去不表。 {... } void DispList(SqList *L) //裁判程序实现,略去不表。 { ... } //你的代码将被嵌在这里
输入样例:
abcdefghia 5 X 1 说明 : 第一行:输入一行字符构造字符顺序表;第二行:在第5个结点处插入字符X的元素;第三行:删除第1个结点元素,并在顺序表中继续删除所有与此结点元素值相等的结点。
输出样例:
-
a b c d e f g h i a a b c d X e f g h i a delete 1th: a b c d X e f g h i a delete 'a' b c d X e f g h i
bool ListInsert(SqList *&L,int i,ElemType e){
if(i <= 0 || i > L->length + 1 || L->length == MaxSize)
return false;
int j;
i--;
if(i == L->length){
L->data[i] = e;
L->length++;
}
else{
for(j = L->length;j > i;j--)
L->data[j] = L->data[j - 1];
L->data[i] = e;
L->length++;
e = L->data[i - 1];
}
return true;
}bool ListDelete(SqList *&L,int i,ElemType &e){
if(i < 1 || i > L->length)
return false;
i--;
e = L->data[i];
int k;
for(k = i;k < L->length;k++)
L->data[k] = L->data[k + 1];
L->length--;
return true;
}bool ListDeleteElem(SqList *&L,ElemType e){
int i,k,flag = 0;
for(i = 0;i <= L->length;i++)
if(L->data[i] == e){
flag = 1;
for(k = i;k <= L->length - 1;k++)
L->data[k] = L->data[k + 1];
L->length--;
}
if(flag == 0)
return false;
return true;
} -
原题有50分,这个答案有45分
PTA 顺序表的基本操作
猜你喜欢
转载自blog.csdn.net/Stephanie17395/article/details/83001689
今日推荐
周排行