数据结构之静态顺序表

#include<stdio.h>

#define MaxSize 10 //宏定义 替换效果 MaxSize替换为50
#define ElemType int //ElemType 替换为 int

typedef struct List{
int length =10; //可以不设置=10 为了区别初始化前后我才设置的
ElemType data[MaxSize];//静态的就是采用数组方式储存
}Node; //typedef struct List 用 Node 代替

//初始化
void initList(Node* L)
{
printf("初始化前length的值=%d\n",L->length);
L->length=0; //数组里没东西就是0
printf("初始化后length的值=%d\n",L->length);
}

void insertList(Node* L,ElemType a)
{
if(L->length==10)//因为MaxSize我设置的是10,所以最大能装10个元素
{
printf("表满 length=%d\n",L->length);
return;//满了就结束
}
L->data[L->length]=a;//不满就顺序执行到这里
L->length++;
}

//这是一个显示函数
void print(Node *L)
{
for(int i=0;i<L->length;i++)
printf("%d ",L->data[i]);
printf("\n");
}

//查询函数,将数组传入,target是要查询的元素,存在返回下标,不存在返回-1
int locateElem(Node *L,ElemType target)
{
int tmp=-1;
for(int i=0;i<L->length;i++)
{
if(target==L->data[i])tmp=i;//一一对比,看看有无符合的元素,有则将下标赋值给tmp
}
if(tmp!=-1)
{
printf("存在\n");
return tmp;//找到了,返回下标
}

else
{
printf("不存在\n");
return -1;
}
}

//根据下标插入数据 a是要插入的数据 index是想插入的下标
//还不能插入到比当前表中元素数目大于二的位置,因为length是每次加一,并非记录
void zhen_insertList(Node *L,ElemType a,int index)
{
//先看看是不是表是不是满的,是则失败
if(L->length>MaxSize-1)
{
printf("插入失败\n");
return;
}
printf("插入前表中元素数目%d \n",L->length);
for(int i=L->length;i>=index;i--)
{
//printf("当前i=%d \n",i);
L->data[i]=L->data[i-1];
}
L->data[index-1]=a;
L->length++;
printf("插入成功\n");
}

int main()
{
//测试代码
Node L;
initList(&L);//初始化
while(1){
ElemType a;
scanf("%d",&a);
insertList(&L,a);
print(&L);


printf("插入数值9 index=1\n");
int cha=9,index=1;
zhen_insertList(&L,cha,index);

printf("插入后:\n");
print(&L);
}

 

return 0;
}

静态顺序表就是比较的死板,固定死链表长度
大体是定义一个喜欢的结构体,然后在结构体里把某一类别的的数据拿来申请数组(这个类别也可以是结构体,套个娃),这样就完成了静态链表的创建。

void initList(Node* L)
初始化也是将你喜欢的结构体里的属性length赋值为0,代表目前的静态表没数据储存
void insertList(Node* L,ElemType a)
插入函数就先判断一下你表是否满,就是看length属性的值有没有等于你规定的那个数组长度,可以把判别链表长度的写成一个函数。插入后length++
void print(Node *L)
显示函数,把数组的元素一个一个读出来
int locateElem(Node *L,ElemType target)
查询函数,传入链表指针和目标值,找到后返回目标的索引,找不到返回-1

void zhen_insertList(Node *L,ElemType a,int index)
你来定义插入位置的函数,传入的参数是链表指针,插入数据,插入的位置。先判断是否还有位置给你插入,表未满就可以插入。但是只能插入到有数据的位置

posted @ 2022-07-15 21:07  天天掉头发  阅读(67)  评论(0编辑  收藏  举报
返回顶端