软基上机实验报告顺序表扩展题.docx
- 文档编号:23182880
- 上传时间:2023-05-15
- 格式:DOCX
- 页数:8
- 大小:44.53KB
软基上机实验报告顺序表扩展题.docx
《软基上机实验报告顺序表扩展题.docx》由会员分享,可在线阅读,更多相关《软基上机实验报告顺序表扩展题.docx(8页珍藏版)》请在冰豆网上搜索。
软基上机实验报告顺序表扩展题
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;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;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;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语言对于现在的帮助很大,但是有些时候也会造成障碍,像一些不懂的语法问题以及以前养成的不好习惯像
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 上机 实验 报告 顺序 扩展