构造一个长度为5的线性表,求表的长度,查找指定位置的元素,并修改其元素的值为指定值

#include <stdlib.h> 
#include <stdio.h>
#include <iostream>
#define LIST_INIT_SIZE 5    //线性表存储空间的初始分配量 
#define LISTINCREMENT 5     //线性表存储空间的分配增量 

typedef  int  ElemType,status;

#define OK 1
#define OVERFLOW -1

typedef struct
{
	ElemType *elem;			//存储空间基址 
	int length;				//当前长度 
	int listsize;			//当前分配的存储容量(以sizeof(ElemType)为单位) 
 }sqlist;
 
//构造一个长度为5的线性表 
status InitList_sq(sqlist &L)
{
	int x;
	L.elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));	//开辟5*ElemType字节长度的地址空间,并返回首地址
	if(!L.elem)exit(OVERFLOW);	
	printf("创建一个长度为5的线性表\n");								//存储分配失败 
	for(int i =0;i<LIST_INIT_SIZE;i++)
	{
		printf("请输入第%d个元素:",i+1);
		scanf("%d",&x);
		L.elem[i]=x;
	}
	L.length=LIST_INIT_SIZE;									//空表长度为5 
	L.listsize=LIST_INIT_SIZE*sizeof(ElemType);					//初始存储容量 
	return OK;
}

//线性表的长度
int ListLength(sqlist *L)
{
	return (L->length);
}

//查找元素的位置
 int ElemLocate(sqlist L, int e)
 {
 	for(int i=0;i<L.length;i++)
 	{
 		if(L.elem[i]==e)
 			return i+1;
    }	
    return 0;
 }

//查找指定位置的元素 
 int LocateElem(sqlist L, int e)
 {
 	return L.elem[e-1];	
 }

//查找指定位置的元素并修改其值为指定值 
 void UpdateElem(sqlist L, int e,int m)
 {
    L.elem[e-1]=m;
 }


//输出线性表的所有元素
void OutPutElem(sqlist L) 
{
	printf("线性表的元素为:");
	for(int i=0;i<L.length;i++)
 	{
 		printf("%d\t",L.elem[i]);
    }	
} 

int main(){
	int x,y; 								//用于接受用户输入的值 
	sqlist L;								//定义线性表L 
	InitList_sq(L);							//构造一个长度为5的线性表
	L.length = ListLength(&L);				//求线性表的长度 
	printf("线性表长度为:%d\n",L.length);			//输出线性表的长度 
	OutPutElem(L);							//输出线性表的所有元素 
	do
	{
		printf("\n请输入要查找的位置元素:");	
		scanf("%d",&x);							//接收要查找元素的位置 
		if(1<=x&&x<=L.length)					//判断是否超出线性表的长度 
		{
			int z = LocateElem(L,x);
			printf("此位置的元素是%d",z);
			break;
		}
		else
		{
			printf("位置超出界限,请重新输入");
		}
	}
	while(true);
	printf("\n请输入此位置要修改为的元素:");
	scanf("%d",&y);							//接收要修改后的元素值 
	UpdateElem(L,x,y);						//修改元素
	printf("修改后的"); 
	OutPutElem(L);							//输出线性表的所有元素 
	return 0; 
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值