/**
* ADT 线性表(List)
* Data
* Operation
* InitList(*L);
* ListEmpty(L);
* ClearList(*L);
* GetElem(L,i,*e);
* LocateElem(L,e);
* ListInsert(*L,i,e);
* ListDelete(*L,i,*e);
* ListLength(L);
* endADT
*/
#include <stdio.h>
#define MAXSIZE 10
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
typedef int ElemType;
typedef struct
{
ElemType data[MAXSIZE];//会初始化为零么?
int length;
}SqList;
Status MakeData(int data[]);//初始化赋值列表
Status InitList(SqList *L, int data[]);//初始化
Status ListEmpty(SqList L);//为空返回true,为假返回false
Status ClearList(SqList *L);//清空线性表
Status GetElem(SqList L, int i, ElemType *e);//返回i位置上的值
Status LocateElem(SqList L, ElemType e);//查找与e相同的元素,查找成功就返回序号,不成,则返回0
Status ListInsert(SqList *L, int i, ElemType e);//i位置上插入e
Status ListDelete(SqList *L, int i, ElemType *e);//删除i上的元素
Status ListLength(SqList L);//返回元素个数
int main()
{
SqList L;
int data[MAXSIZE-5];//留点空余,以作后面的操作
MakeData(data);
InitList(&L, data);
printf("线性表长度为:%d\n", ListLength(L));
ListEmpty(L);
printf("线性表长度为:%d\n", ListLength(L));
ElemType e, i;
printf("请输入你想要的位置i:\n");
scanf("%d", &i);
GetElem(L, i, &e);
printf("%d\n", e);
printf("与e相等的元素位于%d\n", LocateElem(L, e));
ListInsert(&L, i, e);
printf("线性表长度为:%d\n", ListLength(L));
ListDelete(&L, i, &e);
printf("线性表长度为:%d\n", ListLength(L));
ClearList(&L);
printf("线性表长度为:%d\n", ListLength(L));
return 0;
}
Status MakeData(int data[])
{
for (int i = 0; i < MAXSIZE-5; ++i)
{
data[i] = i+2;
}
return OK;
}
Status InitList(SqList *L, int data[])
{
L->length = 0;
for (int i = 0; i < MAXSIZE-5; ++i)
{
L->data[i] = data[i];
L->length++;
}
for (int i = MAXSIZE-5; i < MAXSIZE; ++i)
{
L->data[i] = 0;
}
return OK;
}
Status ListEmpty(SqList L)
{
if (L.length == 0)
{
return TRUE;
}
return FALSE;
}
Status ClearList(SqList *L)
{
if (L->length == 0)
{
return OK;
}
for (int i = 0; i < L->length; ++i)
{
L->data[i] = 0;
}
return OK;
}
Status GetElem(SqList L, int i, ElemType *e)
{
if (L.length==0 || i<1 || i>L.length)
{
return ERROR;
}
*e = L.data[i-1];
return OK;
}
Status ListInsert(SqList *L, int i, ElemType e)
{
int k;
if (L->length == MAXSIZE)
{
return ERROR;
}
if (i<1 || i>L->length+1)
{
return ERROR;
}
if (i<=L->length)
{
for (k=L->length-1; k>=i-1; k--)
{
L->data[k+1] = L->data[k];//向后移动
}
}
L->data[i-1] = e;
L->length++;
return 0;
}
Status ListDelete(SqList *L, int i, ElemType *e)
{
int k;
if (L->length == 0)
{
return ERROR;
}
if(i<1 || i>L->length)
{
return ERROR;
}
*e = L->data[i-1];
if (i<L->length)
{
for (k=i; k<L->length; k++)
{
L->data[k-1] = L->data[k];//向前移动
}
L->data[L->length-1] = 0;
}
L->length--;
return OK;
}
Status LocateElem(SqList L, ElemType e)
{
for (int i = 0; i < L.length; ++i)
{
if (L.data[i] == e)
{
return i+1;
}
}
return FALSE;
}
Status ListLength(SqList L)
{
if (!L.length)
{
return 0;
}
//计数这里倒也没必要这么复杂,直接返回L->length就好了嘛
//这里权当练习
int count = 0;
for (int i = 0; i < MAXSIZE; ++i)
{
if (L.data[i] == 0)
{
return count;
}
count++;
}
return count;//其实就是MAXSIZE
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人