随机函数

线性表顺序存储实验2 使用随机函数,生成包含20个介于60-99直接的整数值,存入顺序存储线性表,然后调用相应删除算法,删掉线性表中最大的数(如果有多个相同的最大数,删除第一个即可),然后输出线性表剩余值。

COMMON.H
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<time.h> //用于设置随机数种子用

#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0

SEQLIST.H
#include"common.h"
/*
*头文件中最好只包含全局变量的声明,函数声明,宏定义等代码,
*不建议包括函数的完整实习代码,以免报重复引用错误。
*函数代码实现部分在seqlist.c中完成
*/
#define ElemType int
#define MAXSIZE 100 /此处的宏定义常量表示线性表可能达到的最大长度/

typedef struct
{
ElemType elem[MAXSIZE]; /线性表占用的数组空间/
int last; /记录线性表中最后一个元素在数组elem[ ]中的位置(下标值),空表置为-1/
} SeqList;

//函数功能:顺序表中查找值为e的元素位置
//输入参数L:顺序表
//输入参数e:要查找的元素
//返回值:若找到则返回顺序表中的位置(下标+1),否则返回-1
int Locate(SeqList L,ElemType e);

//函数功能:在顺序表指定位置插入值e
int InsList(SeqList *L, int i,ElemType e);

/在顺序表L中删除第i个数据元素,并用指针参数e返回其值/
//函数功能:删除顺序表中的指定位置i上的元素
int DelList(SeqList *L,int i,ElemType *e) ;

//函数功能:输出顺序表的值
void SeqPrint(SeqList *L);

//函数功能:LA与LB表合并算法
void Merge(SeqList *LA, SeqList *LB, SeqList *LC);

SEQLIST.C
#include"seqlist.h"

//函数功能:顺序表中查找值为e的元素位置
//输入参数L:顺序表
//输入参数e:要查找的元素
//返回值:若找到则返回顺序表中的位置(下标+1),否则返回-1
int Locate(SeqList L,ElemType e)
{
int i=0; /i为扫描计数器,初值为0,即从第一个元素开始比较/
while((i<=L.last)&&(L.elem[i]!=e)) /顺序扫描表,直到找到值为e的元素, 或扫描到表尾而没找到/
i++;
if(i<=L.last)
return(i+1); /若找到值为e的元素,则返回其序号/
else
return(-1); /若没找到,则返回空序号/
}

//函数功能:在顺序表指定位置插入值e
int InsList(SeqList *L, int i,ElemType e)
{
int k;
if(i<1||(i>L->last+2)) //首先判断插入位置是否合法
{
printf(“插入位置i不合法”);
return(ERROR);
}
if(L->last>=MAXSIZE-1)
{
printf(“表已满,无法插入”);
return(ERROR);
}

for(k=L->last;k>=i-1;k--)			//插入元素位置之后的元素逐个向后移动 
{
	L->elem[k+1]=L->elem[k]; 
} 
L->elem[i-1]=e;						//在C语言中数组第i个元素的下标为i-1
L->last++; 							//尾指示器增加1 
return(OK);

}
/在顺序表L中删除第i个数据元素,并用指针参数e返回其值/
//函数功能:删除顺序表中的指定位置i上的元素
int DelList(SeqList *L,int i,ElemType *e)
{
int k;
if((i<1)||(i>L->last+1))
{
printf(“删除位置不合法!”);
return(ERROR);
}
*e= L->elem[i-1]; //将删除的元素存放到e所指向的变量中
for(k=i;k<=L->last;k++) //此句教材代码有误
L->elem[k-1]= L->elem[k]; //将后面的元素依次前移
L->last–; //尾指示器-1
return(OK);
}

//函数功能:输出顺序表的值
void SeqPrint(SeqList *L)
{
printf(“当前线性表中数据为:\n”);
int i;
for(i=0;i<=L->last;i++)
printf("%d “,L->elem[i]);
printf(”\n");
}
//函数功能:LA与LB表合并算法
void Merge(SeqList *LA, SeqList *LB, SeqList *LC)
{
int i, j, k;
i=0; j=0; k=0;
while(i<=LA->last && j<=LB->last) //遍历两个线性表
{ if(LA->elem[i]<=LB->elem[j]) //如果 LA(i)的当前元素值小,则LA(i)放入LC中
{
LC->elem[k]= LA->elem[i];
i++; }
else //否则LB(j)放入LC中
{
LC->elem[k]=LB->elem[j];
j++;
}
k++;
}
while(i <= LA->last) //将表LA余下的元素赋给表LC
{
LC->elem[k] = LA->elem[i];
i++; k++;
}
while(j <= LB->last) //将表LB余下的元素赋给表LC
{
LC->elem[k]= LB->elem[j];
j++; k++;
}
LC->last=LA->last+LB->last+1; //LC的尾指示器赋值
}

MAIN.C
#include"seqlist.h"
/*
使用随机函数,生成包含20个介于60-99直接的整数值,存入顺序存储线性表,
然后调用相应删除算法,删掉线性表中最大的数(如果有多个相同的最大数,
删除第一个即可),然后输出线性表剩余值。
*/
int main()
{
//创建顺序表并录入值
SeqList L;
int i,p;
int max=0,m; //max 存放最大值下标

L.last=19;							//线性表的长度已知:20 
srand((int)time(0));				//设置随机数种子,避免每次生成的随机数都一样 
for(i=0;i<=L.last;i++)
{		
	L.elem[i]=rand()%40+60;       	//生成60-99以内的整数 

// if(L.elem[max]<L.elem[i]) //找出最大值下标
// max=i;
}
//输出当前线性表内容
SeqPrint(&L);

//找出最大值对应下标,这一步也可以在上面的循环中完成 
for(i=0;i<=L.last;i++)
{
	if(L.elem[max]<L.elem[i])
		max=i; 
} 
//删除操作
printf("要删除的最大值位置:%d\n",max+1);
if(DelList(&L,max+1,&m)==1)		//调用删除算法,根据返回值判断是否删除成功,&m用于传出删除的值 
{
	printf("最大值%d已被删除。\n",m);
	SeqPrint(&L);
}		
else
	printf("删除失败。\n");

//system("pause");          	//防止运行结果窗口自动关闭 
return 0;

}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值