C语言实现顺序表 创建表/查找元素/删除元素/定位元素/输出表元素/插入元素到指定位置功能

#define _CRT_SECURE_NO_WARNINGS
#include "stdio.h"
#include "stdlib.h"
#define MaxSize 100
#define ElemType int
typedef struct {
	ElemType data[MaxSize];
	int last;
}Sqlist;//顺序表的类型
void InitList(Sqlist* L)//L=&List 初始化顺序表
{
	L->last = -1;
}
void OutputList(Sqlist L)//输出顺序表所有元素
{
	int i;
	for (i = 0; i <= L.last; i++) {
		printf("%d ", L.data[i]);
	}
	printf("\n");
}
bool Create(Sqlist* L, int n) { //判断是否成立
	if (n > MaxSize || n < 1) {//判断是否非法
		return false;
	}
	else {
		return true;
	}
}
void CreateList(Sqlist* L) {//创建顺序表
	int n;
	bool flag_C;
	printf("请输入您想创建顺序表的长度:");
	scanf("%d", &n);
	flag_C = Create(L, n);
	int c;//赋值循环变量
	if (flag_C) {
		L->last = n - 1;
		for (c = 0; c <= n - 1; c++) {//赋值
			scanf("%d", &L->data[c]);
		}
		printf("您成功创建了一个长度为%d的顺序表\n", n);
		OutputList(*L);
	}
	else {
		printf("输入非法,创建失败!");
	}
}
void GetData(Sqlist L)//输入位置查找元素
{
	int g;
	printf("请输入您想要查找的元素所在位置: ");
	scanf("%d", &g);
	if (g > L.last + 1 || g < 1) {
		printf("您的输入并不合法。");
	}
	else {
		printf("%d\n", L.data[g - 1]);
	}
}
void Locate(Sqlist L) {//查看固定位置的元素
	int l;
	printf("输入您想查看位置的元素:");
	scanf("%d", &l);
	int k = 0;
	while ((k <= L.last) && (L.data[k] != l)) k++;
	if (k <= L.last) {
		k = k + 1;
		printf("%d\n", k);
	}
	else {
		printf("您输入的元素并未查到。");
	}
}

bool Delet(Sqlist* L, int m) {
	if (L->last == -1) {
		printf("顺序表为空,无法删除\n");  return false;
	}
	if (m<1 || m>L->last + 1) {
		printf("删除位置不合法,无法删除\n");  return false;
	}
}
int DeletList(Sqlist* L) {//删除元素
	int m;
	int j;
	printf("请输入要删除第几个元素: ");
	scanf("%d", &m);
	bool flag_D;
	flag_D = Delet(L, m);
	for (j = m + 1; j <= L->last + 1; j++)
		L->data[j - 2] = L->data[j - 1];
	L->last--;
	return 1;
}
int InsertList(Sqlist* L)
{
	int x;
	int i;
	int p;
	printf("输入插入位置和插入元素: ");
	scanf("%d", &p);
	scanf("%d", &x);
	if (L->last >= MaxSize - 1) {
		printf("顺序表满了,无法插入\n");
	}
	if ((p < 1) || (p > L->last + 2)) {
		printf("插入位置不合法,无法插入\n");
	}
	for (i = L->last; i >= p - 1; i--)
		L->data[i + 1] = L->data[i];
	L->data[p - 1] = x;
	L->last++;
	return 1;
}
void Interface() {
	printf("1.创建顺序表  \t"); printf("2.查找元素\n");
	printf("3.删除元素    \t"); printf("4.定位元素\n");
	printf("5.输出所有元素\t"); printf("6.插入指定元素到指定位置\n");
	printf("7.结束操作\n");
}
int main() {
	Sqlist List;
	InitList(&List);
	int choice;
	while (1)
	{
		Interface();
		printf("请输入菜单序号:");
		scanf("%d", &choice);
		if (choice == 7) break;
		switch (choice)
		{
		case 1:CreateList(&List); break;
		case 2:GetData(List); break;
		case 3:DeletList(&List); break;
		case 4:Locate(List); break;
		case 5:OutputList(List); break;
		case 6:InsertList(&List); break;
		default:printf("您的输入有误\n");
		}
	}
	return 0;
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值