数据结构————顺序表王道P22综合应用题

 

 我的解答:我的主要思路如下:

1、删除顺序表中最小的数
2、返回被删除的数,用顺序表的最后一位数进行填充
3、若顺序表为空则显示出错信息并退出运行

本人也是第一次写这种算法题,以为要写一个可以运行的程序。但答案的意思就是写出一个方法去实现题目的功能

#include<stdio.h>
#include<stdlib.h>
#define InitSize 10
//定义顺序表
typedef struct{
int *data;
int length;
int MaxSize;
}SeqList;

//初始化顺序表
void InitList(SeqList &L){
L.data=(int *)malloc(InitSize*sizeof(int));
L.length=10;
L.MaxSize=InitSize;
}
//1、删除顺序表中最小的数
//2、返回被删除的数
//3、若顺序表为空则显示出错信息并退出运行
int DeleteList(SeqList &L,int &n){

int i;
for( i=0;i<L.length;i++){//找到最小值的位置,
if(n==L.data[i]){
n=L.data[i]; //将被删除的值储存
L.data[i]=L.data[L.length-1];//用顺序表的最后一个值来填充
}
L.length--; //顺序表在被删除的同时,顺序表的长度也减一
return n; //返回最小值
}
}

//调用顺序表
int main(){
SeqList L;

InitList(L);
for(int i=0;i<L.length;i++){

scanf("%d",&L.data[i]);
}
int min=L.data[0];
if(L.data==NULL){
printf("删除失败!此顺序表为空!\n");
}
else{

for(int i=0;i<L.length;i++){//找顺序表中的最小值
if(min>L.data[i]){
min=L.data[i];
}
}
printf("删除成功!删除的最小值为:%d\n",DeleteList(L,min));
printf("删除后的顺序表为:\n");
for(int i=0;i<L.length;i++){
printf("%d ",L.data[i]);
}
}
}

 答案:

 

 相比之下,答案的确精简许多,其中一些算法也挺好的,可以借来用用,当然其中也参杂了一些我不知道的知识点,就比如引用传参。

那就回顾一下吧!

引用传参不是取地址

    例如:void fun(&a){

    int a=2  

  }

  int main(){

    int num=1;

    fun(num);

    }

从这个例子中,程序没有专门为a开辟空间,可以看出,num与a其实本质上是一样的,也就是别名不一样

 

posted @ 2022-07-26 23:14  技术大佬  阅读(112)  评论(0)    收藏  举报