软基实验顺序表Word下载.docx
《软基实验顺序表Word下载.docx》由会员分享,可在线阅读,更多相关《软基实验顺序表Word下载.docx(14页珍藏版)》请在冰豆网上搜索。
初始化顺序表,顺序表利用数组作为基础,其特点是需要事先获得全部元素空间,因此本函数的主要功能就是向系统申请足够的空间作为顺序表的存储空间。
涉及的系统函数为:
malloc()
**此外,良好的习惯是将空间内的各项数据进行适当的初始化
**Input:
NONE
**Output:
**return:
类型:
table_t*,返回顺序表的结构指针
**Createdby:
**CreatedDate:
**-------------------------------------------------------------------------
**Modifiedby:
**ModifiedDate:
*******************************************************************************************/
table_t*init_table()
{
table_t*t;
t=(table_t*)malloc(sizeof(table_t));
t->
length=0;
returnt;
}
free_table()
释放顺序表空间
**当程序结束时会通过本函数来释放通过malloc获得的顺序表空间
顺序表指针
void
**------------------------------------------------------------------------------------------
voidfree_table(table_t*t)
free(t);
get_table()
查询顺序表
**查询顺序表中第i个元素
**table_t*table;
**intindex;
查询位置,即第i个元素
**element_t*elem;
元素域指针,用来存放被查询到的元素内容,
**(注意,需要将元素全部内容拷贝到该指针所记录的空间中,即,使用memcpy())
int,返回查询是否成功,为0表示找到指定元素,为-1表示没有找到,一般是因为
**index指示的位置超出了顺序表的范围
intget_table(table_t*table,intindex,element_t*elem)
//判断index是否超出顺序表范围
if(index<
=0||index>
table->
length){
return-1;
}
//复制元素内容到指定空间中;
memcpy(elem,&
(table->
data[index-1]),sizeof(element_t));
//error
return0;
add_table()
将指定元素放入到顺序表的末尾
**element_tdata;
待放入的元素
添加新元素后的顺序表指针
int;
为-1表示放入失败,一般是因为顺序表已经放满,为0表示正确放入
intadd_table(table_t*table,element_tdata)
data[table->
length]=data;
length++;
return0;
insert_table()
将指定元素插入到顺序表的指定位置之前
**intlocation;
插入位置,语义是:
第X个元素前,,当location大于链表元素总数时,该元素
**将插入到表尾。
插入新元素后的顺序表指针
为-1表示插入失败,一般是因为顺序表已经放满或者插入位置不正确,
为0表示正确插入
intinsert_table(table_t*table,element_tdata,intlocation)
location=location-1;
if(location<
0)
elseif(location>
table->
length)
table->
length+1]=data;
else
{
intj;
for(j=table->
length-1;
j>
=location;
j--)
table->
data[j+1]=table->
data[j];
data[location]=data;
length=table->
length+1;
insert_table_by_order()
将指定元素按照学号从小到大顺序插入到顺序表中
intinsert_table_by_order(table_t*table,element_tdata)
intt,i;
t=table->
length;
if(t==MAX_TABLE_SIZE){
i=0;
while(table->
data[i].stuID<
data.stuID){
i++;
insert_table(table,data,++i);
delete_table()
删除顺序表中指定姓名作为关键字的元素
**char*name;
以该姓名为关键字的元素将被删除
删除指定元素后的顺序表指针
为-1表示删除失败,一般是因为顺序表没有找到指定元素,
为0表示正确删除
intdelete_table(table_t*table,char*name)
inti;
i=0;
while(strcmp(name,table->
data[i].stuName)){
if(i==MAX_TABLE_SIZE){
return-1;
}
for(i;
i<
i++){
data[i]=table->
data[i+1];
length-=1;
delete_table_below()
删除顺序表中总分小于某个指定值的所有元素,本算法的特点是
**希望一趟能在顺序表中删除多个元素
**intx;
删除范围,即被删除的元素总分小于这个值
删除元素后的顺序表指针
void;
voiddelete_table_below(table_t*table,intx)
intt[MAX_TABLE_SIZE];
inti,j;
j=0;
for(i=0;
if(x>
data[i].overall){
t[j]=i;
j++;
for(j-=1;
=0;
j--){
for(i=t[j];
length-=1;
returnNULL;
七、程序流程说明
通过补全函数实现对顺序表的各种操作。
八、测试数据
输入:
创建顺序表
应输出(上机前自己分析的结果):
成功创建
插入:
插入到6号之前
成功插入顺序表
删除1号元素
成功删除1号元素
删除总分80以下的元素
成功删除总分80以下的元素
九、上机时遇到的问题
1问题现象:
找不到文件“stdafx.h”
原因:
编译错误
解决办法:
删除编译产生的debug文件夹重新编译
2问题现象:
编译时提示return出现错误
0与NULL的不同
将return0;
改成returnNULL;
一十、
实际运行结果
一十一、小结体会
1.在补充函数时对C语言的学习不够,导致许多语法错误,应该加强对C语言的基础训练。
2.对顺序表的结构和各种操作的模式不熟悉,导致补充函数时没有思路,此后应该上课认真听讲。
3.应该加强与同学的互相交流,分工合作,提高效率互相学习。