顺序表创建和基础操作

顺序表的创建及操作

顺序表结构体定义

typedef struct SqList
{
	int *elem;//元素
	int length;//元素个数
	int listsize;//表长
}

顺序表初始化:

void InitSqList(SqList &L)
{
	L.elem=(int*)malloc(sizeof(int));//申请地址空间
	if(!L.elem)//申请失败
		exit(-1);
	L.length=0;//线性表元素个数为0
	L.listsize=InitSize;//线性表初始长度100
}

顺序表建表

void createSqList(SqList &L,int n)//传入顺序表名称以及表长
{
	int e;
	for(int i=0;i<n;i++)
	{
		scanf("%d",&e);
		L.elem[i]=e;
		++(L.length);
	}
}

顺序表输出

void showSqList(SqList L,int length)//传入顺序表及其长度
{
	int i;
	int k;
	for( i=0;i<length-1;i++)
	{
		k=L.elem[i];
		printf("%d\t",k);
	}
	k=L.elem[i];
	printf("%d\n",k);
	
}

顺序表p位置添加元素e

int insertElem(SqList &L,int p, int e)
{
	if(p<0||p>L.length||L.length==MaxSize)//插入失败
		return -1;
	++(L.length);//可插入 顺序表长度+1
	for(int i=L.length-2;i>=p;--i)
	{
		L.elem[i+1]=L.elem[i];
	}
	L.elem[i]=e;
	return 1;
}

删除顺序表中所有的元素e

void delElem(SqList &L,int e)//传入顺序表以及被删除的元素e
{
	for(int i=0;i<L.length;i++)
	{
		if(L.elem[i]==e)
			{
				for(int j=i;j<L.length;j++)
				{
						L.elem[j]=L.elem[j+1];
				}
				--(L.length);
				i--;//i复原1位
			}		
	}
}

删除顺序表中下标为p的元素

int delElement(SqList &L,int p)
{
	if(p<0||p>L.length-1||L.length==0)
	{
		printf("位置错误");
		return -1;
	}
	for(int i=p;i<L.length;i++)
	{
		L.elem[i]=L.elem[i+1];
	}
	--(L.length);
	return 1;
}

修改下标为p位置上的元素

int changeElem(SqList &L,int p,int e)
{
	if(p<0||p>L.length-1||L.length==0)
	{
		printf("位置错误");
		return -1;
	}
	L.elem[p]==e;
	return 1;
}

将顺序表中所有的元素e换为t

void changeElems(SqList &L,int e,int t)//
{
	for(int i=0;i<L.length;i++)
	{
		if(L.elem[i]==e)
			{
				L.elem[i]=t;
			}		
	}
}

在顺序表中查找元素e,输出其下标

int findElem(SqList L,int e)
{
	int find=0;//查找结果标志
	for(int i=0;i<L.length;i++)
	{
		if(L.elem[i]==e)
			{
				printf("%d下标为%d",e,i);
				find=1;
			}		
	}
	if(find==0)
		printf("未找到该元素");
	return 1;
}

查找下标为p的元素

int getElem(SqList L,int p)
{
	int e;
	if(p<0||p>L.length-1)
		printf("位置错误");
	else
		{
			e=L.elem[p];
			printf("下标为%d的元素为%d",p,e);
}

完整代码

#include<stdio.h>
#include<stdlib.h>
#define InitSize 100
#define MaxSize 200
typedef struct SqList
{
	int *elem;
	int length;
	int listsize;

} SqList;
int InitSq(SqList &L)//初始化线性表
{
	L.elem=(int*)malloc(sizeof(int));
	if(!L.elem)
		exit(-1);
	L.length=0;
	L.listsize=InitSize;
	return 1;
}
void create(SqList &L,int n)
{
	int e;
	for(int j=0;j<n;j++)
	{
		scanf("%d",&e);
		L.elem[j]=e;
		L.length=j+1;
	}
}
void show(SqList L,int n)
{
	int j;
	int k;
	printf("该线性表为");
	for(j=0;j<n-1;j++)
	{
		k=L.elem[j];
		printf("%d\t",k);
	}
	if(j==n-1&&n>0)
	{
		k=L.elem[j];
		printf("%d",k);
	}
	printf("\n");

}
int insertElem(SqList &L,int p,int e)//在下标为p的位置插入元素e
{
	int i;
	if(p<0||p>L.length||L.length==MaxSize)
		return 0;
	L.length+=1;
	for(i=L.length-1;i>=p;--i)
	{
		L.elem[i+1]=L.elem[i];
	}
	L.elem[p]=e;

	return 1;
}
int delElem(SqList &L,int e)//删除表中为e的元素
{
	for(int i=0;i<L.length;i++)
	{
		if(L.elem[i]==e)
		{	for(int j=i;j<L.length;j++)
			{
				L.elem[j]=L.elem[j+1];
			}
		L.length-=1;
		i--;
		}
	
	}
	return 1;
}
int delElement(SqList &L,int p)//删除顺序表下标为p的元素
{
	if(p<0||p>L.length-1)
		return 0;
	for(int i=p;i<L.length-1;i++)
	{
		L.elem[i]=L.elem[i+1];
	}
	L.length--;
	return 1;

}
int findElem(SqList L,int e)//查找某元素在表中的位置
{
	int i;
	int find=0;
	for(i=0;i<L.length;++i)
	{
		if(L.elem[i]==e)
		{
			printf("元素%d下标为 %d\n",i);
			find=1;
		}
	}
	if(find==0)
		printf("cannot find it");
	return 1;
}
int getElem(SqList L,int n)//查找表中某位置上的元素
{
	int k;
	if(n<0||n>L.length)
		return 0;
	k=L.elem[n];
	printf("下标为%d的元素是%d",n,k);
	return 1;
}
int changeElem(SqList &L,int p,int e)//修改位置p上的元素为e
{	
	if(p<0||p>L.length)
		return 0;
	L.elem[p]=e;
	return 1;	
}

int main()
{
	SqList L;
	int n;
	InitSq(L);//顺序表初始化
	printf("请输入线性表元素个数");
	scanf("%d",&n);
	create(L,n);//顺序表建表
	show(L,n);//输出顺序表
	findElem(L,6);
	getElem(L,3);
	insertElem(L,4,9);
	show(L,L.length);
	delElem(L,2);
	show(L,L.length);
	delElement(L,2);
	show(L,L.length);
	return 1;
}
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值