实验项目名称:顺序表基础题
一、首先创建一个顺序表:从键盘读入一组整数(长度小于等于20),按输入顺序放入顺序表,输入以-1结束(注意-1不放到顺序表内);将创建好的顺序表元素依次输出到屏幕上。
二、2)在已创建好的顺序表中插入一个元素:从键盘读入需插入的元素值和插入位置,调用插入函数完成插入操作;然后将顺序表元素依次输出到屏幕上。
三、3)在已创建好的顺序表中删除一个元素:从键盘读入欲删除的元素位置(序号),调用删除函数完成删除操作;然后将顺序表元素依次输出到屏幕上。
四、
软件技术基础实验table.cpp
二、程序代码
table_t * init_table() { table_t * t; t=(table_t *)malloc(sizeof(table_t)); t->length=0; return t; }
int get_table(table_t * table,int index, element_t * elem) {
} //判断index是否超出顺序表范围 if(index table->length){ return -1; } //复制元素内容到指定空间中; memcpy(elem,&(table->data[index-1]),sizeof(element_t));//error return 0;
int add_table(table_t * table, element_t data) { if(table->length > MAX_TABLE_SIZE)
return -1; table->data[table->length]=data; table->length++; AddReport(\"成功添加一个元素\"); return 0; }
一. 测试数据
数据.text 二. 上机时遇到的问题
不熟悉malloc()函数的用法 解决方案:上网查找资料 三. 实际运行结果
四. 心得体会
再分配内存空间时,采用动态方式会方便很多,不需要预先估计大小,只是在使用完毕后需要释放空间。查询数据时,顺序表中元素的下标和他的位置差一(下标=位置-1)。
一. 程序说明
将一个数据插入到指定位置。将一个数据按照学号大小顺序插入到对应位置。 二. 程序代码
int insert_table(table_t * table, element_t data, int location) { if(locationMAX_TABLE_SIZE)
return -1; if(location>table->length)
location=table->length+1; location = location -1; table->length++; int i; for(i=table->length-1;i>location;i--){
table->data[i]=table->data[i-1]; } table->data[location]=data; return 0; }
int insert_table_by_order(table_t * table, element_t data) { if(table->length > MAX_TABLE_SIZE)
return -1; int i,location; for(i=0;ilength;i++){
if(data.stuID data[i].stuID){
location=i;
break;
} } table->length++; for(i=table->length-1;i>location;i--){
table->data[i]=table->data[i-1]; } table->data[location]=data;
return 0; } 三. 测试数据
数据.txt 四. 上机时遇到的问题
不会调用学号
解决办法:认真阅读指导书后发现学号stuID是data的成员变量。 五. 实际运行结果
六. 心得体会
data本身作为一个结构体,包含了一个学生的若干信息,又作为结构体数组位于table当中,这样能很方便的调用学生信息。
一. 程序说明 二. 程序代码
int delete_table(table_t * table, char * name) { int i,j; for(i=0;ilength;i++){
for(j=0;j
if(table->data[i].stuName[j]!=name[j])
break;
}
if(j==MAX_NAME_SIZE)
break; } if(i=table->length)
return -1; for(j=i;ilength;j++){
table->data[j]=table->data[j+1]; } table->length--; return 0; }
void delete_table_below(table_t * table, int x) { int i,j=1; for(i=0;ilength;i++){
if (x > table->data[i].overall)
break; } for(;ilength;i++){
while(x>table->data[i+j].overall){
j++;
}
table->data[i]=table->data[i+j];
table->length=table->length-j; } return ; } 三. 测试数据
数据.txt 四. 上机时遇到的问题
无
五. 实际运行结果
六. 心得体会
在删除单个元素时,由于检索元素是姓名,是字符组,所以需要进行循环判断是否相等,再判断跳出时的下标,以此来判断姓名是否正确。删除大量时和删除负数操作类似。