数据结构-纯c语言版-硬钢顺序表

数据结构-c语言版
前言:本来不想用纯c写的,(c与c++混合版,c++单独版已经够了),但我们死板又可爱的数据结构老师非要我们用纯c写[doge],好了,数据结构-纯c语言版-硬钢顺序表,她来了!
本文章将收费,原因是:本文章只是按照大学里老师的要求写,仅用于学习和交作业,没有企业会要这样的写法,除了学生党,其他群体没有太大的必要参考;

#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
typedef struct {
	int elem [MAXSIZE];
	int last;//在有元素的前提下,最后一个元素的下标[0,last]   ,  否则为-1
}SqList;

void Create(SqList* L) {//创建顺序表
	//int elem [MAXSIZE];
	L->last = -1;//没有元素是下标为-1
	//L->elem[0] = 1;
	return;
}

int InitList(SqList* L) {//初始化顺序表
	//int elem[MAXSIZE];
	int n;
	printf("请输入要初始化顺序表元素的个数:\n");
	scanf("%d", &n);
	printf("您要初始化顺序表元素的个数为%d:\n", n);
	for (int i = 0; i < n; i++) {
			scanf("%d", &L->elem[i]);
			L->last=n-1;
		}
//	L->last++;
	return 0;
}

//前插法
int ListInsert(SqList* L, int i, int e) {//在第i个元素前插入元素e
	//可以在第一个和最后一个元素的前面插入
	if (i < 1 || i > L->last + 2) {  //i表示插入的位置(不是下标),即插入的位置最小是1,最大是last+2
		//i=1时,就if(假)=>i合法
		//i=last+2时,也是if(假)=>i合法
		//当i超过上面的范围时,就if(真),i就不合法
		printf("i值不合法");
		return 0;//if(0)为假
	}
	if (L->last == 100) {
		printf("存储空间已满");
		return 0;//if(0)为假
	}
	for (int j = L->last; j >= i-1; j--) {//传进来的i不是下标,但遍历的时候还是用下标(i-1)
		L->elem[j + 1] = L->elem[j];
	}
	L->elem[i-1] = e;
	L->last++;
	return 1;//if(非0)为真
}
void ListPrint(SqList* L) {
	printf("已经保存的元素个数为:%d\n", L->last+1);
	for (int j = 0; j < L->last+1; j++) {
		printf("%d\t", L->elem[j]);
	}
	printf("\n");
}
int listDelete(SqList* L, int i) {
		//可以删除第一个和最后一个元素
	if (i < 1 || i>L->last + 1) {
		//i=1时,1<1,假的,就if(假)=>if{}不执行=>i合法
		//i=last+2时,也是if(假)=>i合法
		//当i超过上面的范围时,就if(真),i就不合法
		printf("不合法\n");
		return 0;//if(0)为假
	}
	for (int j = i-1; j < L->last; j++) {//传进来的i不是下标,但遍历的时候还是用下标(i-1)
		L->elem[j] = L->elem[j + 1];
	}
	L->last--;
	return 0;//if(非0)为真
}

int listSeek(SqList* L, int e) {//查找元素e的位置是i
	int i = 0;
	for (int j = L->last; j >= i; j--) {
		if (L->elem[j] == e) {
			i = j;//if(0)=>if(假)
			break;//当找到位置i时就跳出循环,返回i,否则就不用break,返回最初始的i
		}
	}
	return i;
}
int main() {
	SqList L;
	Create(&L);//创建顺序表
	printf("顺序表创建成功...\n");
	InitList(&L);
	printf("顺序表初始化成功...\n");


		ListPrint(&L);

	printf("请分别输入要插入的位置(不是下标)和元素(用空格隔开):");
	int  m, s;
	scanf("%d %d", &m, &s);
	if (ListInsert(&L, m , s)) {
		printf("插入成功\n");
	}
	else {
		printf("插入失败");
	}
	ListPrint(&L);

	printf("请输入要删除的位置(不是下标)===========\n");
	int v;
	scanf("%d", &v);
	if (listDelete(&L, v)) {
		printf("删除成功\n");
	}
	else {
		printf("删除失败");
	}
	ListPrint(&L);

	int e;
	printf("请输入您要查找的元素:\n");
	scanf("%d", &e);
	if (listSeek(&L, e)) {
		printf("查找成功\n");
		printf("找的元素%d的位置是:%d(不是下标)\n", e, listSeek(&L, e) + 1);
	}
	else {
		printf("查找失败\n");
	}


	system("pause");
	return 0;
}

在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

踏过山河,踏过海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值