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