typedef int ElementType;//线性表内数据元素类型重命名为ElementType,目前是int
typedef struct SqList* List;
struct SqList {
ElementType Data[MAXSIZE];//最大容量
int length;//表长
};
1、初始化
//空表
List MakeEmpty() {
List PtrL;
PtrL = (List)malloc(sizeof(struct SqList));
PtrL->length = 0;
return PtrL;
}
2、插入
//插入
bool ListInsert(List PtrL, ElementType X, int i) {//在PtrL中第i个位置插入元素X
if (PtrL->length == MAXSIZE) {//线性表已满
return false;
}
if (i<1 || i>PtrL->length + 1) {//位置不对
return false;
}
for (int j = PtrL->length - 1; j >= i - 1; j--) {
PtrL->Data[j + 1] = PtrL->Data[j];
}
PtrL->Data[i - 1] = X;
PtrL->length++;
return true;
}
3、删除
//删除
bool ListDelete(List PtrL, int i) {//删除PtrL中第i个位置上的元素
if (i<1 || i>PtrL->length) {
return false;
}
for (int j = i; j < PtrL->length; j++) {
PtrL->Data[j - 1] = PtrL->Data[j];
}
PtrL->length--;
return true;
}
4、查找
4-1、按位查找
//按位查找
ElementType GetElem(List PtrL, int i) {//查找PtrL中第i个位置的元素
return PtrL->Data[i - 1];
}
4-2、按值查找
//按值查找
int LocateElem(List PtrL, ElementType X) {//返回下标
int i;
if (PtrL->length == 0) {
return 0;
}
for (i = 0; i < PtrL->length; i++) {
if (PtrL->Data[i] == X) {
return i + 1;
}
}
if (i >= PtrL->length) {
return 0;
}
}
5、输出
//输出
void DisList(List PtrL) {
int i;
for (i = 0; i < PtrL->length; i++) {
printf("%d ", PtrL->Data[i]);
}
return;
}
6、完整+测试程序
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAXSIZE 20
typedef int ElementType;//线性表内数据元素类型重命名为ElementType,目前是int
typedef struct SqList* List;
struct SqList {
ElementType Data[MAXSIZE];//最大容量
int length;//表长
};
//初始化
void InitList(List PtrL) {
//PtrL = (List)malloc(sizeof(struct SqList));
PtrL->length = 0;
return;
}
//空表
List MakeEmpty() {
List PtrL;
PtrL = (List)malloc(sizeof(struct SqList));
PtrL->length = 0;
return PtrL;
}
//插入
bool ListInsert(List PtrL, ElementType X, int i) {//在PtrL中第i个位置插入元素X
if (PtrL->length == MAXSIZE) {//线性表已满
return false;
}
if (i<1 || i>PtrL->length + 1) {//位置不对
return false;
}
for (int j = PtrL->length - 1; j >= i - 1; j--) {
PtrL->Data[j + 1] = PtrL->Data[j];
}
PtrL->Data[i - 1] = X;
PtrL->length++;
return true;
}
//删除
bool ListDelete(List PtrL, int i) {//删除PtrL中第i个位置上的元素
if (i<1 || i>PtrL->length) {
return false;
}
for (int j = i; j < PtrL->length; j++) {
PtrL->Data[j - 1] = PtrL->Data[j];
}
PtrL->length--;
return true;
}
//输出
void DisList(List PtrL) {
int i;
for (i = 0; i < PtrL->length; i++) {
printf("%d ", PtrL->Data[i]);
}
return;
}
//查找
//按位查找
ElementType GetElem(List PtrL, int i) {//查找PtrL中第i个位置的元素
return PtrL->Data[i - 1];
}
//按值查找
int LocateElem(List PtrL, ElementType X) {//返回下标
int i;
if (PtrL->length == 0) {
return 0;
}
for (i = 0; i < PtrL->length; i++) {
if (PtrL->Data[i] == X) {
return i + 1;
}
}
if (i >= PtrL->length) {
return 0;
}
}
//TEST
int main(void) {
List L;
L = MakeEmpty();
int len, x, dn, gn, ln;
printf("请输入n(n≤10):\n");
scanf("%d", &len);
printf("请输入对应数量的整数元素(用空格隔开):\n");
for (int i = 1; i <= len; i++) {
scanf("%d", &x);
ListInsert(L, x, i);
}
printf("该表为:\n");
DisList(L);
printf("\n");
printf("请输入要删除的元素对应的位置序号:\n");
scanf("%d", &dn);
int flag = ListDelete(L, dn);
if (flag) {
printf("成功删除第%d个元素\n", dn);
}
else {
printf("删除失败\n");
}
DisList(L);
printf("\n");
printf("请输入要查找元素的位置:\n");
scanf("%d", &gn);
int va = GetElem(L, gn);
printf("第%d个位置的元素值为%d\n", gn, va);
printf("请输入要查找的元素值:\n");
scanf("%d", &ln);
int flag_ln = LocateElem(L, ln);
if (flag_ln) {
printf("%d元素的位置为%d\n", ln, flag_ln);
}
else {
printf("查找失败\n");
}
return 0;
}