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

本文介绍了如何使用C语言实现一个简单的线性表,包括构造线性表、获取和显示长度、以及在指定位置插入和删除元素的操作。
摘要由CSDN通过智能技术生成
#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);
}

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


//删除第i个元素
void DelElem(sqlist *L,int Loc)
{
    for(int i=Loc;i<=L->length;i++)		//从要删除位置开始往后遍历
    {
        L->elem[i-1]=L->elem[i];			//将要删除位置的后面的元素依次往前赋值
    }
    L->length--;							//删除元素后长度减1
}

//在指定元素前插入一个新的元素 
void LocInsElem(sqlist *L)
{
	L->length++;
	int x,y;
	int flag=true;
	do
	{
		printf("\n请输入指定元素:");	
		scanf("%d",&x);							//接收指定的元素 
		for(int i=0;i<L->length;i++) 
		{
			if(x==L->elem[i])					//判断是否此元素是否存在 
			{
				x=i;
				flag=false;
				break;
			}
		}
		if(flag==false)
		{
			break;
		}
		else
		{
			printf("此元素不存在,请重新输入");
		}
	}
	while(true); 
	printf("请输入插入的元素:");
	scanf("%d",&y);
	for(int i=L->length-1;i>x;i--)		
    {
        L->elem[i]=L->elem[i-1];			//将要插入位置的后面的元素依次往后赋值
    }
    L->elem[x]=y;
}



int main()
{
	sqlist L;
	InitList_sq(L);									//构造一个长度为5的线性表
	L.length = ListLength(&L);						//求线性表的长度
	printf("线性表长度为:%d\n",L.length);			//输出线性表的长度 
	OutPutElem(L);									//输出线性表的所有元素 
	int x;
	do
	{
		printf("\n请输入要删除的位置元素:");	
		scanf("%d",&x);							//接收要删除元素的位置 
		if(1<=x&&x<=L.length)					//判断是否超出线性表的长度 
		{
			DelElem(&L,x); 
			break;
		}
		else
		{
			printf("位置超出界限,请重新输入");
		}
	}
	while(true);
	L.length = ListLength(&L);						//求线性表的长度并赋值给LL 
	printf("线性表长度为:%d",L.length);			//输出线性表的长度 
	OutPutElem(L);									//输出线性表的所有元素 
	LocInsElem(&L);									//在指定元素前插入一个新的元素
	OutPutElem(L);									//输出线性表的所有元素 
	printf("线性表长度为:%d",L.length);			//输出线性表的长度 
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值