本题主要思维就是通过数据结构线线性表一维静态分配_Maxg1en-的博客-CSDN博客定义一维数组,通过随机静态赋值,定义findMin()函数去寻找最小值下标,定义delmin()对线性表元素进行删除。
findMin()应用的是遍历数组全部内容,使用pos代表最小值下标,初始化默认第一个数值data[0]的值为最小值,pos值为0,如果遇到更大的值,则更改。
delmin()是使用将线性表传入,通过findMin()函数得到最小值下标,将后续的所有后续元素向前移动一维,移动结束后,记得将线性表Length-1.
#include <stdio.h>
#include <stdlib.h>
typedef int Elemtype;
#define MaxSize 50
typedef struct
{
Elemtype data[MaxSize];
int length;
}SqList;
void findMin(SqList *L,int *value,int *pos)
{
int i = 1;
*value = L->data[0];
*pos = 0;
while(i<L->length)
{
if (L->data[i] < *value)
{
*value = L->data[i];
*pos = i;
}
i++;
}
}
int delmin(SqList* L, Elemtype* value)
{
//如果线性表长度等于0 则删除失败
if (L->length == 0)
return 0;
int pos = 0;
*value = 0;
findMin(L, value, &pos);
//找到最小值后,将最后一个值与最小值的位置替换,然后将length的长度减一。
L->data[pos] = L->data[L->length - 1];
L->length = L->length - 1;
return 1;
}
int main(void)
{
int value=0, pos=0;
SqList L;
L.length = 10;
for (int i =0;i<L.length;i++)
{
L.data[i] = rand(5);
}
L.data[0] = 1555565;
/*
findMin(&L, &value, &pos);
for (int i = 0;i < L.length;i++)
{
printf("%d\n",L.data[i]);
}
printf("the most value is %d, the min postion is %d\n",value,pos);
*/
int num = 0;
if(delmin(&L, &num))
{
printf("%d\n",num);
for (int i = 0;i < L.length;i++)
{
printf("%d\n", L.data[i]);
}
}
else {
printf("删除失败");
}
return 0;
}