顺序表(基础题)_顺序表习题
顺序表(基础题)由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“顺序表习题”。
实验项目名称:顺序表基础题
一、首先创建一个顺序表:从键盘读入一组整数(长度小于等于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 四. 上机时遇到的问题
无
五. 实际运行结果
六. 心得体会
在删除单个元素时,由于检索元素是姓名,是字符组,所以需要进行循环判断是否相等,再判断跳出时的下标,以此来判断姓名是否正确。删除大量时和删除负数操作类似。