/* 学习B站的王道考研-数据结构所做的笔记
算法的时间复杂度
空间复杂度
1.1线性表-顺序表
知道数据结构的三个内容:
1.逻辑存储关系
2.物理关系
3.该数据结构的常规操作。
*/
/*
线性表的常规操作:
初始化一个线性表:InitList(&L);
销毁一个线性表:DestoryList(&L);
插入操作:ListInsert(&L,i,e);
删除操作:listDelete(&L,i,&e);
按值查找:LocateElem(L,e);
按位查找:GetElem(L,i);
其他操作:
求表长:Length(L);
输出操作:PrintList(L);
判空操作:Empty(L);
在什么时候需要在传入参数的时候引用“&”,对参数要带回来。
*/
#include<stdio.h>
#include<stdlib.h>
#include<string>
#define Maxsize 10
typedef int ElemType;//这里根据顺序表中数据的类型来定义,我们假设数据为int型。
typedef struct{
ElemType data[Maxsize];
int length;
}SqList;
//基本操作-初始化一个顺序表 -静态分配
void InitList(SqList &L)
{
for(int i=0;i<Maxsize;i++)
{L.data[i]=0;};
L.length=0;
};
//在线性表中加入下一个元素 算法时间复杂度O(1);
bool ListNextInsert(SqList &L)
{
if(L.length>=Maxsize)return false;
scanf("%d",&L.data[L.length]);
L.length++;
return true;
}
//往线性表的指定位置i插入指定的元素e,算法时间复杂度O(n)
bool ListInsert(SqList &L,int i,ElemType e)
{
if(L.length>=Maxsize||i>L.length+1||i<1) return false;//判断是否会溢出 判断是否有效
for( int j=L.length;j>=i;j--)
L.data[j]=L.data[j-1];
L.data[i-1]=e;
L.length++;
return true;
}
//把顺序表的指定位置的元素给删除,并且把删除的值传入元素e中,算法的时间复杂度0(n);
bool ListDelete(SqList &L,int i,ElemType &e)
{
if(i<i||i>L.length)return false;
e=L.data[i-1];
for(int j=i;j<L.length;j++)
L.data[j-1]=L.data[j];
L.length--;
return true;
}
//顺序表的按位查找,过去表中第i各元素的值;算法时间复杂度O(1)
ElemType GetElem(SqList L,int i)
{ if(i<1||i>L.length)return 0;
return L.data[i-1];
}
//顺序表的按值查找,在表L中查找到给定关键字的元素;时间算法复杂度O(n)
int LocateElem(SqList L,ElemType e)
{
for(int i=0;i<L.length;i++)
if(e==L.data[i])
return i+1;
return 0;
}
//PrintList(SqList L) 打印顺序表所有的元素
bool PrintList(SqList L)
{
printf("当前顺序表内容为");
for(int i=0;i<L.length;i++)
{
printf("%d",L.data[i]);
}
printf("\n");
return true;
}
bool mune()
{
printf("1.输出当前表长\n");
printf("2.输出当前顺序表的内容\n");
printf("3.在表尾添加元素\n");
printf("4.在指定位置i处添加某一元素\n");
printf("5.在指定位置i处删除元素\n");
printf("6.查找元素e的位置\n");
}
int main()
{
SqList L;
InitList(L);
int choice,temp,i;
while (1)
{
mune();
printf("请输入选择的序号:");
scanf("%d",&choice);
switch (choice)
{
case 1: printf("当前表长:%d",L.length);printf("\n");break;
case 2: PrintList(L);break;
case 3: ListNextInsert(L);break;
case 4: printf("请依次输入位置i和内容e:");scanf("%d %d",&i,&temp);ListInsert(L,i,temp);break;
case 5: printf("请输入删除的位置i:");scanf("%d",&i);ListDelete(L,i,temp);printf("删除元素为:%d \n",temp);
default:printf("输入错误");
}
}
}