顺序表的初始化、建立、求表长、输出、插入、查找、删除等操作

#include<stdio.h>
#define MAXSIZE 10
typedef int Status;                                              //函数结构状态码 0-失败; 1-成功
typedef int ElemType;

typedef struct
{
	ElemType data[MAXSIZE];
	int length;
}SqList;

//顺序表操作的函数声明
void InitList(SqList *LP);                                       //顺序表的初始化
void CreateList(SqList *LP,ElemType a[],int n);                  //顺序表的创建
void PrintList(SqList *LP);                                      //顺序表的输出
int ListLength(SqList *LP);                                      //求顺序表的长度,即当前元素个数
Status ListInsert(SqList *LP,int i,ElemType e);                  //顺序表的插入操作,在位置i插入元素e
Status GetElem(SqList *LP,int i,ElemType *e);                    //顺序表的查找操作,返回第i个位置的元素值到e中
Status ListDelete(SqList *LP,int i,ElemType *e);                 //顺序表的删除操作,返回第i个位置的元素值到e中


int main()
{
	SqList L,*SP;
	int flag;                                                    //用于接收函数返回状态,0或1
	ElemType result;                                             //用于接收查找或删除的元素
	int search;                                                  //查找或删除search位置的元素

	ElemType arr[]={12,14,16,24,28,30,42,77};
	SP=&L;
	InitList(SP);
	CreateList(SP,arr,8);
	PrintList(SP);
	printf("顺序表的当前长度是:%d\n\n",ListLength(SP));


	//顺序表中插入元素

	printf("在第0个位置插入25:\n");
	flag=ListInsert(SP,0,25);
	if(flag==1)
	{
	PrintList(SP);
	printf("顺序表的当前长度是:%d\n\n",ListLength(SP));
	}
	else
	{
	printf("顺序表插入失败!\n");
	printf("顺序表的当前长度是:%d\n\n",ListLength(SP));
	}
	


	printf("在第10个位置插入100:\n");
	flag=ListInsert(SP,10,100);
	if(flag==1)
	{
	PrintList(SP);
	printf("顺序表的当前长度是:%d\n\n",ListLength(SP));
	}
	else
	{
	printf("顺序表插入失败!\n");
	printf("顺序表的当前长度是:%d\n\n",ListLength(SP));
	}



	printf("在第11个位置插入110:\n");
	flag=ListInsert(SP,11,110);
	if(flag==1)
	{
	PrintList(SP);
	printf("顺序表的当前长度是:%d\n\n",ListLength(SP));
	}
	else
	{
	printf("顺序表插入失败!\n");
	printf("顺序表的当前长度是:%d\n\n",ListLength(SP));
	}

	//顺序表中插入元素






	//顺序表中查找元素

	printf("要查找第几个元素?\n");
	scanf("%d",&search);
	flag=GetElem(SP,search,&result);
	if(flag==1)
		printf("第 %d 个元素是 %d \n\n",search,result);
	else
		printf("顺序表查找失败!\n");

	//顺序表中查找元素







	//顺序表中删除元素

	printf("要删除第几个元素?\n");
	scanf("%d",&search);
	flag=ListDelete(SP,search,&result);
	if(flag==1)
		printf("删除的第 %d 个元素是 %d \n\n",search,result);
	else
		printf("顺序表删除失败!\n");

	//顺序表删除元素


	return(0);
}

void InitList(SqList *LP)
{
	LP->length=0;
}

void CreateList(SqList *LP,ElemType a[],int n)
{
	int i;
	for(i=0;i<n;i++)
	{
		LP->data[i]=a[i];
		LP->length++;
	}
}

void PrintList(SqList *LP)
{
	int i;
	printf("\n 顺序表中的元素为:\n");
	for(i=0;i<LP->length;i++)
		printf("%4d",LP->data[i]);
	printf("\n\n");
}

int ListLength(SqList *LP)
{
	return(LP->length);
}



/*====================================
函数功能:顺序表运算——元素的插入
函数输入:顺序表地址,插入值,插入位置
函数输出:完成标志—— 0:异常 1:正常
====================================*/
Status ListInsert(SqList *LP,int i,ElemType e)
{
	int k;

	if(LP->length==MAXSIZE)                                     //顺序表已满
		return 0;
	if(i<1||i>LP->length+1)                                     //插入位置i非法
		return 0;

	for(k=LP->length-1;k>=i;k--)                                //从顺序表最后一个元素开始后移
		LP->data[k+1]=LP->data[k];

	LP->data[i-1]=e;                                            //讲插入的元素放入i-1中

	LP->length++;                                               //顺序表长度加1,因为插入了一个元素
	return 1;
}




/*==================================================
函数功能:顺序表运算——元素的查找
函数输入:顺序表地址,查找位置,接收查找值的变量(地址)
函数输出:完成标志—— 0:异常 1:正常
==================================================*/
Status GetElem(SqList *LP,int i,ElemType *e)
{
	int k;
	if(LP->length==0||i<1||i>LP->length)                         //异常情况;空表或查找位置越界    
		return 0;
	*e=LP->data[i-1];
	return 1;
}



/*===========================================
函数功能:顺序表运算——元素的删除
函数输入:顺序表地址,删除位置,返回删除元素值
函数输出:完成标志—— 0:异常 1:正常
===========================================*/
Status ListDelete(SqList *LP,int i,ElemType *e)
{
	int k;
	if(LP->length==0)                                           //顺序表为空
		return 0;
	if(i<1||i>LP->length)                                       //删除位置越界
		return 0;
	*e=LP->data[i-1];                                           //获得删除的元素值

	for(k=i;k<LP->length;k++) 
		LP->data[k-1]=LP->data[k];

	LP->length--;
	return 1;
}

  • 8
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是顺序表的基本操作的代码: ``` #include <stdio.h> #include <stdlib.h> #define MAXSIZE 100 // 定义最大长度 typedef struct { int data[MAXSIZE]; // 存放顺序表元素 int length; // 存放顺序表长度 } SeqList; // 初始化顺序表 void InitList(SeqList *L) { L->length = 0; } // 插入元素 int ListInsert(SeqList *L, int pos, int e) { if (pos < 1 || pos > L->length + 1) { // 判断插入位置是否合法 return 0; } if (L->length >= MAXSIZE) { // 判断顺序表是否已满 return 0; } for (int i = L->length; i >= pos; i--) { // 将插入位置后的所有元素向后移动一位 L->data[i] = L->data[i - 1]; } L->data[pos - 1] = e; // 插入元素 L->length++; // 顺序表长度加1 return 1; } // 删除元素 int ListDelete(SeqList *L, int pos) { if (pos < 1 || pos > L->length) { // 判断删除位置是否合法 return 0; } for (int i = pos; i < L->length; i++) { // 将删除位置后的所有元素向前移动一位 L->data[i - 1] = L->data[i]; } L->length--; // 顺序表长度减1 return 1; } // 查找元素 int LocateElem(SeqList L, int e) { for (int i = 0; i < L.length; i++) { if (L.data[i] == e) { // 找到元素 return i + 1; // 返回元素在顺序表中的位置 } } return 0; // 找不到元素 } // 求顺序表长度 int ListLength(SeqList L) { return L.length; } // 查找前驱元素 int PriorElem(SeqList L, int cur_e) { for (int i = 1; i < L.length; i++) { if (L.data[i] == cur_e) { // 找到当前元素 return L.data[i - 1]; // 返回前驱元素 } } return -1; // 找不到前驱元素 } // 输出顺序表 void PrintList(SeqList L) { for (int i = 0; i < L.length; i++) { printf("%d ", L.data[i]); } printf("\n"); } int main() { SeqList L; InitList(&L); ListInsert(&L, 1, 1); ListInsert(&L, 2, 2); ListInsert(&L, 3, 3); printf("顺序表元素:"); PrintList(L); printf("顺序表长度:%d\n", ListLength(L)); printf("元素2的位置:%d\n", LocateElem(L, 2)); printf("2的前驱元素:%d\n", PriorElem(L, 2)); ListDelete(&L, 3); printf("删除元素3后的顺序表:"); PrintList(L); return 0; } ``` 注:以上代码只是顺序表基本操作的一种现方式,不代表该现方式是最佳的。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值