线性表存储

线性表顺序存储实验1 使用线性表查找算法,录入如下线性表(4,9,15,28,30,30,42,51,62),然后查找42所在的位置并输出之。
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"

/*
使用线性表查找算法,录入如下线性表(4,9,15,28,30,30,42,51,62),
然后查找42所在的位置并输出之。
*/
int main()
{
//创建顺序表并赋值
SeqList L;
int p;

L.last=8;					//根据上面的值得到尾标 	
//逐个赋值元素	
L.elem[0]=4;	L.elem[1]=9;
L.elem[2]=15;	L.elem[3]=28;
L.elem[4]=30;	L.elem[5]=30;
L.elem[6]=42;	L.elem[7]=51;
L.elem[8]=62;	
//调用函数,输出当前线性表内容
SeqPrint(&L);
//调用查找算法-函数(方法)调用
printf("要查找的值为:42。\n");
p=Locate(L,42);     		//调用查找算法 
if(p==-1)
	printf("没找到。");
else
	printf("要找的元素位置为:%d",p);	 

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

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值