顺序表基本操作实现,插入、删除、查找、检索、求表长...

要求设计菜单,根据菜单提示进行操作∶插入一个新元素到第i个位置;删除第i个位置的元素;显示线性表中所有元素的值;检索表中第i个元素;求表的长度等运算。

具体编程如下:

#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100      //顺序表可能达到的最大长度
typedef int ElemType;
//结构体 
typedef struct
{
	ElemType *data;      //存储空间的基地址
	int length;          //当前长度
}SqList;                 //顺序表的结构类型为SqList

//顺序表初始化 
void InitList(SqList *L)
{
	L->data=(ElemType*)malloc(MAXSIZE*sizeof(ElemType));
	if(!L->data)
	{
		printf("顺序表初始化错误!\n");
	}
	else
	{
		L->length=0;
		printf("顺序表已初始化为空表\n");
	}
	printf("\n");
}

//对顺序表进行顺序插入元素 
void InsertData(SqList *L,int n)
{
	int i;
	ElemType e;
	printf("顺序表顺序插入的数据为:");
	for(i=0;i<n;i++)
	{
		scanf("%d",&e);
		L->data[i] = e;
	}
	L->length = n;
} 

//显示顺序表中所有元素的值
void ShowData(SqList *L)
{
	int i;
	printf("当前顺序表中的数据为:");
	for(i=0;i<L->length;i++)
	{
		printf("%d ",L->data[i]);
	}
	printf("\n");
}

//求表的长度
void ShowLength(SqList *L)
{
	printf("当前顺序表的表长为:%d",L->length);
	printf("\n");
}

//插入一个新元素到第i个位置
void ListInsert(SqList *L,int i,ElemType e)
{
	int j;
	if(i<1||i>L->length+1)
	{
		printf("插入i值不合法!");
	}
	if(L->length==MAXSIZE)
	{
		printf("存储空间已满,无法插入!");
	}
	for(j=L->length-1;j>=i-1;j--)
	{
		L->data[j+1]=L->data[j];
	}
	L->data[i-1]=e;
	++L->length;
	printf("新元素成功插入");
	printf("\n");
} 

//删除第i个位置的元素
void ListDelete(SqList *L,int i)
{
	int j;
	if((i<1)||(i>L->length))
	{
		printf("删除i值不合法!");
	}
	for(j=i;j<=L->length-1;j++)
	{
		L->data[j-1]=L->data[j];
	}
	--L->length;
	printf("指定元素成功删除");
	printf("\n");
} 
 
//检索表中第i个元素
void GetElen(SqList *L,int i)
{
	ElemType e;
	if(i<1||i>L->length)  
	{
		printf("检索i值不合法!");
	}
	else
	{
		e = L->data[i-1];
		printf("表中第%d个元素检索为:%d",i,e);
	}
	printf("\n");
} 
 
int main()
{
	SqList L;
	InitList(&L);
	printf("\n");
	
	int n;
	printf("你想输入的数据个数为:\n"); 
	scanf("%d",&n);
	InsertData(&L,n);
	ShowData(&L);
	ShowLength(&L);
	
	int i,e;
	printf("请输入要插入的位置和相应值:\n");
	scanf("%d %d",&i,&e);
	ListInsert(&L,i,e);
	ShowData(&L);
	
	int j;
	printf("请输入要删除的位置:\n");
	scanf("%d",&j);
	ListDelete(&L,j);
	ShowData(&L);
	
	int m;
	printf("请输入要检索的位置:\n");
	scanf("%d",&m);
	GetElen(&L,m);
	return 0;
}

编译实现如下图:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值