顺序表的顺序存储、初始化、插入、删除、查找、修改等操作C语言数据结构(注释详细)

用C语言定义顺序表,分别用函数实现下列功能:
{

  1. 初始化顺序表;
  2. 插入运算:将元素x插入到顺序表中第i个元素位置(元素位置是>=1的数);
  3. 查找运算:在顺序表中查找与值x匹配的元素,若查找成功,则返回元素在顺序表中的位置(该元素是顺序表中的第几个元素);
  4. 删除运算:删除顺序表中第i个位置的元素;

}

正在学c语言数据结构的同学最好不要照搬,通过注释自己摸索写出属于自己的代码才是最重要的。

话不多说,直接上代码:

//注:orderlist(顺序表)

#include<stdio.h>
#include<stdlib.h>//调用标准库头文件,用于malloc动态分配函数和清屏函数的使用
#define MAXLENGTH 999//设置顺序表的最大长度为999

typedef int integer;//将数据类型int改名为integer(元素类型)

typedef struct//将结构体类型改名为struct_orderlist
{
	integer datas[MAXLENGTH];//定义顺序表最大长度
	integer last;//定义顺序表的光标插入位置
}struct_orderlist;//结构体引用名


/********************初始化顺序表******************/
struct_orderlist *initial_orderlist()
{
	struct_orderlist *L;//定义结构体指针变量
	L=(struct_orderlist *)malloc(sizeof(struct_orderlist));//malloc动态内存分配,向系统请求分配结构体大小字节的内存空间给指针变量
	L->last=-1;//设置顺序表的长度为-1,表示顺序表为空
	return L;//返回顺序表的首地址
}

/********************插入数据元素******************/
integer insert_orderlist(struct_orderlist *L,integer x,int i)//L是顺序表的首地址,x是插入的元素,i是插入的位置
{
	int j;
	for(j=L->last;j>=i-1;j--)
	{
		L->datas[j+1]=L->datas[j];//将顺序表的下一个位置留空,用于下一个元素的插入
	}
	L->datas[i]=x;//将值附给需要插入的位置
	L->last++;//位置光标前移一位
	return 1;
}

/********************删除数据元素******************/
integer delete_orderlist(struct_orderlist *L,int i)//L是顺序表的首地址,i是插入的位置
{
	int j;
	for(j=i-1;j<=L->last-1;j++)
	{
		L->datas[j]=L->datas[j+1];//将元素前移覆盖删除数据
	}
	L->last--;//光标后移一位
	return 1;
}

/*******************输出所有数据元素******************/
void print(struct_orderlist *L)//L是顺序表的首地址
{
	int j;
        if(-1==L->last)//用于判断顺序表有无内容
	{
		printf("顺序表内无内容!");
		return;
	}
	for(j=0;j<=L->last;j++)//有元素,执行下一步操作
	{
		printf("第%d个元素是:%d\n",j+1,L->datas[j]);
	}
}

/********************修改数据元素******************/
integer revise_orderlist(struct_orderlist *L,int i,integer x)//L是顺序表的首地址,x是插入的元素,i是插入的位置
{
	if(i<i||i>=L->last+2)//用于判断是否存在该元素
		return 0;//无元素,返回0
	L->datas[i-1]=x;//有元素,插入修改值
	return 1;//修改成功
}

/********************查找数据元素******************/
integer search_orderlist(struct_orderlist *L,int x)//L是顺序表的首地址,x是插入的元素
{
	int j;
	for(j=0;j<=L->last;j++)
	{
		if(x==L->datas[j])//用于判断是否查找成功
		{
			return j+1;//返回j+1
		}
	}
	return 0;//查找失败
}

/********************主函数******************/
void main()
{
	int i,j,num,x;
	struct_orderlist *L;//初始化顺序表
	L=initial_orderlist();//将顺序表地址赋给L
	while(1)
	{
		printf("\t提示:系统已自动初始化顺序表\n\n");
		printf("\t\t1.插入元素\n\n");
		printf("\t\t2.删除元素\n\n");
		printf("\t\t3.查找元素\n\n");
		printf("\t\t4.输出顺序表中全部元素\n\n");
		printf("\t\t5.修改元素\n\n");
		printf("\t\t6.退出程序\n\n");
		printf("请选择功能项,并按回车执行:");
		scanf("%d",&num);
		switch(num)
		{
		case 1:
			{
				printf("请输入想插入的位置(*请从位置1开始顺序输入!*):\n");
				scanf("%d",&i);
				--i;
				printf("请输入想插入的元素为:\n");
				scanf("%d",&x);
				j=insert_orderlist(L,x,i);
				if(0==j)
				{
					printf("插入错误!可能顺序表已满或插入位置不正确!\n");
					system("pause");
					system("cls");
					break;
				}
				printf("插入成功!\n");
				system("pause");
				system("cls");
				break;
			}
		case 2:
			{
				printf("请输入你要删除的元素位置为:\n");
				scanf("%d",&i);
				j=delete_orderlist(L,i);
				if(0==j)
				{
					printf("删除错误!可能无该元素!\n");
					system("pause");
					system("cls");
					break;
				}
				printf("删除成功!\n");
				system("pause");
					system("cls");
				break;
			}
		case 3:
			{
				printf("请输入你想找的元素为:\n");
				scanf("%d",&x);
				j=search_orderlist(L,x);
				if(j==0)
				{
					printf("查找错误!可能无该元素!\n");
					system("pause");
					system("cls");
					break;
				}
				printf("查找成功!\n");
				printf("该元素是顺序表中的第%d个元素\n",j);
				system("pause");
					system("cls");
				break;
			}
		case 4:
			{
				print(L);
				system("pause");
					system("cls");
				break;
			}
		case 5:
			{
				printf("请输入你想修改的元素位置为:\n");
				scanf("%d",&i);
				printf("该元素修改为:\n");
				scanf("%d",&x);
				j=revise_orderlist(L,i,x);
				if(0==j)
				{
					printf("修改错误!可能无该元素!\n");
					system("pause");
					system("cls");
					break;
				}
				printf("修改成功!\n");
				system("pause");
					system("cls");
				break;
			}
		case 6:
			{
					system("cls");
                                printf("退出成功!");
				return;
			}
		}
	}
}

  • 11
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
非常感谢您的提问!以下是C语言顺序表的基本操作代码实现,带有详细注释: ```c #include <stdio.h> #include <stdlib.h> #define MAXSIZE 100 // 定义顺序表的最大长度 typedef struct { int data[MAXSIZE]; // 存储元素的数组 int length; // 当前长度 } SqList; // 定义顺序表类型 // 初始化顺序表 void InitList(SqList *L) { L->length = 0; // 初始长度为0 } // 插入元素 int ListInsert(SqList *L, int i, int e) { if (i < 1 || i > L->length + 1) { // 判断插入位置是否合法 return 0; // 插入失败,返回0 } if (L->length >= MAXSIZE) { // 判断顺序表是否已满 return 0; // 插入失败,返回0 } for (int j = L->length; j >= i; j--) { // 将插入位置及之后的元素后移 L->data[j] = L->data[j - 1]; } L->data[i - 1] = e; // 插入新元素 L->length++; // 长度加1 return 1; // 插入成功,返回1 } // 删除元素 int ListDelete(SqList *L, int i, int *e) { if (i < 1 || i > L->length) { // 判断删除位置是否合法 return 0; // 删除失败,返回0 } *e = L->data[i - 1]; // 保存被删除的元素 for (int j = i; j < L->length; j++) { // 将删除位置之后的元素前移 L->data[j - 1] = L->data[j]; } L->length--; // 长度减1 return 1; // 删除成功,返回1 } // 查找元素 int LocateElem(SqList L, int e) { for (int i = 0; i < L.length; i++) { // 从前往后查找 if (L.data[i] == e) { return i + 1; // 返回元素在顺序表中的位置 } } return 0; // 未找到,返回0 } // 获取元素 int GetElem(SqList L, int i, int *e) { if (i < 1 || i > L.length) { // 判断获取位置是否合法 return 0; // 获取失败,返回0 } *e = L.data[i - 1]; // 获取元素 return 1; // 获取成功,返回1 } // 输出顺序表 void PrintList(SqList L) { for (int i = 0; i < L.length; i++) { printf("%d ", L.data[i]); } printf("\n"); } int main() { SqList L; InitList(&L); ListInsert(&L, 1, 1); ListInsert(&L, 2, 2); ListInsert(&L, 3, 3); ListInsert(&L, 4, 4); ListInsert(&L, 5, 5); printf("顺序表:"); PrintList(L); int e; ListDelete(&L, 3, &e); printf("删除第3个元素:%d\n", e); printf("顺序表:"); PrintList(L); printf("元素5的位置:%d\n", LocateElem(L, 5)); GetElem(L, 2, &e); printf("第2个元素:%d\n", e); return 0; } ``` 希望这个代码能够满足您的需求!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值