看完别忘点赞噢hhh
有问题请评论或私聊
静态线性表
创、销(无)、增、删、改、查
运行结果
//静态顺序存储线性表
//创、销(无)、增、删、改、查
#include<stdio.h>
#define MAXSIZE 50
#define ElemType int
#define Status int
#define OK 1
#define ERROR 0
typedef struct {
ElemType data[MAXSIZE];
int length;
}Sqlist;
Status InitList(Sqlist *L);//初始化表
Status ListInsert(Sqlist &L, int i, Status e);//插入
Status isEmpty(Sqlist &L);//判空
Status ListDeleteLocate(Sqlist &L, int i);//按位删除
//LocateElem(L, e);// 按值查找
Status GetElem(Sqlist &L,int i);//按位查找
void PrintList(Sqlist L);//输出
Status ListModify(Sqlist &L, int i, ElemType e);//修改
//DestroyList(&L);//销毁
int main(){
Sqlist L;
InitList(&L);
ListInsert(L, 0, 1);
ListInsert(L, 1, 2);
ListInsert(L, 2, 3);
PrintList(L);
ListDeleteLocate(L, 1);
PrintList(L);
GetElem(L, 1);
ListModify(L, 0, 3);
PrintList(L);
return 0;
}
//初始化
Status InitList(Sqlist *L){
L->length = 0;
printf("线性表初始化完成\n");
return OK;
}
//输出
void PrintList(Sqlist L){
printf("data中\n");
for (int i = 0; i < L.length; i++)
printf("data[%d] = %d ", i, L.data[i]);
printf("\n线性表的长度为 %d \n", L.length);
return;
}
//按位修改
Status ListModify(Sqlist & L, int i, ElemType e)
{
//0. 判断修改位置存在
if (isEmpty(L)) {
printf("线性表为空,修改失败\n");
return ERROR;
}
else if (i >= L.length || i < 0) {
printf("修改位置不存在\n");
return ERROR;
}
//1.修改
L.data[i] = e;
printf("第%d位修改成功,改为%d\n", i,e);
return OK;
}
//插入
//i: 插入的位置(默认为数组对应位置,从0开始)
//e: 插入的元素
Status ListInsert(Sqlist &L, int i, Status e){
//0. 判断是否超出线性表长度
if (L.length > MAXSIZE){
printf("线性表已达最大长度,插入失败\n");
return ERROR;
}
//1. 将i后面元素依次后移一个位置
for (int j = L.length; j > i; j--){
L.data[j] = L.data[j - 1];
}
//2. 将对应位置补入e
L.data[i] = e;
//3. length++
L.length++;
printf("%d 插入成功!\n", e);
return OK;
}
// 判空
// 空为 1
// 非空为0
Status isEmpty(Sqlist & L)
{
if (L.length == 0)
return OK;
else
return ERROR;
}
//按位删除
Status ListDeleteLocate(Sqlist &L, int i)
{
//0. 判断是否超出线性表长度
if (isEmpty(L)) {
printf("线性表为空,删除失败\n");
return ERROR;
}
else if (i >= L.length || i < 0) {
printf("删除位置不存在");
return ERROR;
}
int e = L.data[i];
//1. 将i后面元素依次前移一个位置
for (int j = i; j < L.length-1; j++) {
L.data[j] = L.data[j + 1];
}
//2. length--
L.length--;
printf("第%d位 %d 删除成功!\n", i+1,e);
return OK;
}
//按位查找
//i :位置
Status GetElem(Sqlist &L, int i)
{
//0. 判断是否超出线性表长度
if (isEmpty(L)) {
printf("线性表为空,查找失败\n");
return ERROR;
}
else if (i >= L.length || i < 0) {
printf("查找位置不存在\n");
return ERROR;
}
printf("查找的值为:第%d位: %d\n", i + 1, L.data[i]);
return OK;
}
运行结果
动态线性表
代码
// 动态线性表
// 2021.5.14
// 20:31
// 创、销(无)、增、删、改(无)、查(无)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define Status int
#define OVERFLOW -1
#define OK 1
#define ERROR 0
#define ElemType int
typedef struct{
ElemType * elem;//指示动态分配数组的指针
int length; //当前长度
int listsize; //顺序表的最大容量
}SqList;
Status InitList(SqList *L); //初始化
Status ListInsert(SqList *L, int i, ElemType e); //插入
Status ListDelete(SqList *L, int i); //删除
void printTable(SqList L); //打印
Status InitList(SqList *L) {
L->elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType)); //申请100空间
if (!L->elem) //申请失败
return ERROR;
L->length = 0; //长度0
L->listsize = LIST_INIT_SIZE; //容量100
return OK; //申请成功
}
Status ListInsert(SqList *L, int i, ElemType e) {
int j;
ElemType *newbase;
if (i<1 || i>L->length + 1)
return ERROR; //非法输入
if (L->length >= L->length) { //已存满,需更大空间
newbase = (ElemType*)realloc(L->elem, (L->listsize + LISTINCREMENT) * sizeof(ElemType));//大10的空间
if (!newbase) //申请失败
return ERROR;
L->elem = newbase; //指针的连接
L->listsize += LISTINCREMENT; //新容量
}
for (j = L->length; j > i - 1; j--) //复制之前的值到新的线性表中
L->elem[j] = L->elem[j - 1];
L->elem[i - 1] = e; //插入操作
printf("第%d个 %d 插入成功\n", i, L->elem[i - 1]);
L->length++;
return OK;
}
Status ListDelete(SqList * L, int i)
{
int j;
if (i<1|| i>L->length) // 非法输入
return ERROR;
for (j = i - 1; j <= L->length; j++) //将删除值后的线性表值前移
L->elem[j] = L->elem[j + 1];
(L->length)--;
return OK;
}
void printTable(SqList L) {
printf("\n");
for (int i = 0; i < L.length; i++) {
printf("i=%d\t", i);
printf("%d \n", L.elem[i]);
}
printf("\n\n");
}
int main(){
SqList L;
int i;
ElemType e;
ElemType data[9] = { 1,2,3,4,5,6,7,8,-99 };
InitList(&L);
for (i = 1; i <= 9; i++) {
ListInsert(&L, i, data[i-1]);
}
printTable(L);
ListDelete(&L, 2);
printTable(L);
return 0;
}