软基上机实验报告顺序表扩展题.docx

上传人:b****2 文档编号:23182880 上传时间:2023-05-15 格式:DOCX 页数:8 大小:44.53KB
下载 相关 举报
软基上机实验报告顺序表扩展题.docx_第1页
第1页 / 共8页
软基上机实验报告顺序表扩展题.docx_第2页
第2页 / 共8页
软基上机实验报告顺序表扩展题.docx_第3页
第3页 / 共8页
软基上机实验报告顺序表扩展题.docx_第4页
第4页 / 共8页
软基上机实验报告顺序表扩展题.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

软基上机实验报告顺序表扩展题.docx

《软基上机实验报告顺序表扩展题.docx》由会员分享,可在线阅读,更多相关《软基上机实验报告顺序表扩展题.docx(8页珍藏版)》请在冰豆网上搜索。

软基上机实验报告顺序表扩展题.docx

软基上机实验报告顺序表扩展题

ex1_2——扩展题:

(1)教材第9题(用顺序表实现)

注意该题中没有提供插入元素的具体位置,要根据元素值大小寻找合适的位置。

(2)(输入一组数建立顺序表),顺序表中包括多个负数,编写算法删除其中所有的负数

本题的特点是优化:

怎样在一轮循环中删除,而不是每删除一个,都把后续元素搬移一次。

ex1_3——扩展题:

输入一组数,建立顺序表,编写算法将整个表的元素全部反序存放——即第一个元素放到最后……。

本题的特点在优化,怎样在原表上,直接实现反序——即不额外使用一张新表。

一、程序代码

Exl_2

#include

#defineMAXNUM20

#definetrue1

#definefalse0

typedefstruct

{

intdata[MAXNUM];

intlength;

}list_type;

/*createalist:

inputdatafromkeyboard,endby-1*/

voidcreatelist(list_type*lp)

{

inti,elem;

lp->length=0;

printf("\npleaseinput10sorteddatasfrommintomaxofthelist(input'end'tostop)\n");

for(i=0;i<10;i++)

{

scanf("%d",&elem);

lp->data[i]=elem;

lp->length++;

}

}

voidshowlist(list_type*lp)

{

inti;

printf("\nThese%drecordsare:

\n",lp->length);

if(lp->length<=0)

{

printf("Nodata!

\n");

return;

}

for(i=0;ilength;i++)

printf("%d",lp->data[i]);

printf("\nlengthofthelistis:

%d",lp->length);

}

intinsertlist(list_type*lp,intnew_elem)

{inti,j;

for(j=lp->length;j!

=0;j--)

if(new_elem<=lp->data[j])

i=j;

for(j=lp->length;j!

=i;j--)

lp->data[j]=lp->data[j-1];

lp->data[i]=new_elem;

lp->length++;

 

return(true);

}

//删除所有负数的函数(自己编写)

voiddelete_negative(list_type*lp)

{

list_typelist2;

inti,j=0;

list2.length=0;

for(i=0;ilength;i++){

if(l->data[i]>0){

list2.data[j]=lp->data[i];

j++;

list2.length++;

}

}

*lp=list2;}

voidmain()

{

list_typelist;

intdata;

createlist(&list);

showlist(&list);

printf("\ninsert:

Enterdata:

\n");

scanf("%d",&data);

insertlist(&list,data);

printf("\nlistafterinsert:

\n");

showlist(&list);

delete_negative(&list);

printf("\nlistafterdeleteallnegative:

\n");

showlist(&list);

while

(1);

}

Exl_3

#include

#defineMAXNUM200

#definetrue1

#definefalse0

typedefstruct

{

intdata[MAXNUM];

intlength;

}list_type;

/*createalist:

inputdatafromkeyboard,endby-1*/

voidcreatelist(list_type*lp)

{

inti,n,elem;

lp->length=0;

printf("\npleaseinputdatasnum\n");

scanf("%d",&n);

printf("\npleaseinput%ddatasofthelist\n",n);

for(i=0;i

{

scanf("%d",&elem);

lp->data[i]=elem;

lp->length++;

}

}

voidshowlist(list_type*lp)

{

inti;

printf("\nThese%drecordsare:

\n",lp->length);

if(lp->length<=0)

{

printf("Nodata!

\n");

return;

}

for(i=0;ilength;i++)

printf("%d",lp->data[i]);

printf("\nlengthofthelistis:

%d",lp->length);

}

voidresortlist(list_type*lp)

{

inti,j,n;

inttemp[200];

n=lp->length;

for(i=0;i

temp[i]=lp->data[i];

for(i=0,j=n-1;i

lp->data[i]=temp[j];

}

voidmain()

{

list_typelist;

intdata,n;

createlist(&list);

showlist(&list);

resortlist(&list);

printf("\nlistafterresort:

\n");

showlist(&list);

while

(1);

}

二、程序流程说明

Exl_1:

输入10个有序数列,然后再输入一个需要插入的数字,将它插入进去并不改变原来的序列,并且删除其中的所有负数

Exl_2:

创建顺序表-输入一组数据-->反序

三、测试数据

Exl_1

输入:

-6-3-101357917

应输出(上机前自己分析的结果):

1135791317

Exl_2

输入:

12345

应输出(上机前自己分析的结果):

54321

四、上机时遇到的问题

1问题现象:

删除负数的时候只能删除部分,不能够充分的删除完

原因:

储存的负数被删除一个时,当后面还有负数的时候会这个负数会继承被删除负数的位置,而此时指针却往后加一,导致不能检测。

解决办法:

在删除负数的函数里执行了删除操作后i=i-1.

五、实际运行结果

六、小结体会

1.有时候要关注最基础的语法,像scanf(“%d,%d”)如果输入的两个数据中间没有自己手动加“,”的话就会容易出错,应该根据自己的习惯来改变其中的语法。

2.在大一上学习的C语言对于现在的帮助很大,但是有些时候也会造成障碍,像一些不懂的语法问题以及以前养成的不好习惯像

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1