线性表顺序存储完整代码

线性表顺序存储完整代码

//1.顺序存储


#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define MAXSIZE 20
#define ERROR -1


typedef int Position;
typedef int ElementType;

typedef struct LNode* PtrToLNode;
struct LNode
{
	ElementType Data[MAXSIZE];
	Position Last;
};
typedef PtrToLNode List;

List L;


**//1.初始化**
List MakeEmpty()
{
	L = (List)malloc(sizeof(struct LNode));
	L->Last = -1;

	return L;
}

//2.创建顺序表


void CreateList()
{
	int i = 0, data = 0;
	printf("输入一组正整数,以-1结束:\n");
	scanf_s("%d", &data);

	while (data != -1 && L->Last < MAXSIZE)
	{
		L->Data[i] = data;
		L->Last++;
		i++;
		scanf_s("%d", &data);
	}
	printf("创建成功!\n");
	if (L->Last == MAXSIZE)
		printf("表满!");

}

//3.查找


Position Find(ElementType X)
{
	Position i = 0;
	while (i <= L->Last && L->Data[i] != X)
		i++;
	if (i > L->Last)
		return ERROR;//查找失败
	else
		return i;//查找成功返回X的位置,即i
}

//4.插入


bool Insert( ElementType X, int i)//在第i(i下标为i-1)个元素前插入新的元素 X 
{
	Position j;

	if (L->Last == MAXSIZE - 1)
		printf("表满");
	if (i<1 || i>L->Last + 2)
	{
		printf("插入位序不合法");
		return false;
	}
	for (j = L->Last; j >= i + 1; j--)
	{
		L->Data[j + 1] = L->Data[j];//将位序i及以后元素往后移动
	}
	L->Data[i - 1] = X;
	L->Last++;

	return true;
}

//5.删除


bool Delete(int i)//从L中删除指定位序i的元素,i下标为i-1
{
	Position j;

	if (i<1 || i>L->Last + 1)
	{
		printf("输入该位序不合法");
		return false;
	}

	for (j = i; j <= L->Last; j++)
		L->Data[j - 1] = L->Data[j];

	L->Last--;
	return true;
}

//主函数


int main()
{

	int choice;

	while (1)
	{
		printf("########################\n");
		printf("1.初始化线线性表\n");
		printf("2.创建线性表\n");
		printf("3.查找\n");
		printf("4.插入\n");
		printf("5.删除\n");
		printf("0.退出\n");
		printf("########################\n");

		printf("你的选择是:\n");
		scanf_s("%d", &choice);
	
		switch (choice)
		{

		case 1:
		{


			printf("1.初始化线线性表...\n");
			MakeEmpty();
			if (L->Last == 1)
			{
				printf("初始化成功!\n");
				printf("线性表的长度:%d\n", L->Last);
			}
			break;
		}

		case 2:
		{
			printf("2.创建线性表...\n");
			CreateList();
			break;
		}

		case 3:
		{
			printf("3.查找...\n");
			int x_1;//数值
			printf("输入数值:\n");
			scanf_s("%d\n", &x_1);

			Find(x_1);

			if (Find(x_1) == -1)
				printf("查找失败\n");
			else
				printf("查找成功!位置是%d\n", Find(x_1)+1);
			break;
		}

		case 4:
		{
			printf("4.插入...\n");
			int x_2, position_1;
			printf("输入数值:\n");
			scanf_s("%d\n", &x_2);
			printf("输入位置:\n");
			scanf_s("%d\n", &position_1);

			Insert(x_2, position_1);

			if (Insert(x_2, position_1) == true)
				printf("成功!\n");
			if (Insert( x_2, position_1) == false)
				printf("失败!\n");
			break;
		}

		case 5:
		{
			printf("5.删除...\n");
			int position_2;
			printf("输入位置:\n");
			scanf_s("%d\n", &position_2);

			Delete(position_2);

			if (Delete(position_2) == true)
				printf("成功!\n");
			if (Delete(position_2) == false)
				printf("失败!\n");
			break;
		}

		case 0:
		{
			return 0;
			break;
		}

		default:
			printf("选择有错,请重新选择\n");
			break;

		}

		scanf_s("%c", &choice);
	}


	return 0;
}

#########C语言小白还有很多不足,欢迎大家批评指正######

  • 4
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值