补上之前动态顺序表的初始化,实现语言依旧是C,注释都已经标注在代码中
#include <stdio.h>
#include <stdlib.h>
#define InitSize 10
typedef struct {
int *data;
int MaxSize;
int length;
}*PSqList,SqList;
void InitList(PSqList L) {
L->data = (int *)malloc(InitSize*sizeof(int));
L->length = 0;
L->MaxSize = InitSize;
}
void IncreaseSize(PSqList L,int len) {
int *p = L->data;
L->data = (int *)malloc((L->MaxSize + len)*sizeof(int));
for(int i=0;i<L->MaxSize;i++) {
L->data[i] = p[i];
}
L->MaxSize +=len;
free(p);
}
bool ListInsert(PSqList L,int i,int e) {
if(i<1||i>L->length + 1)
return false;
if(L->length >= L->MaxSize)
return false;
for(int j=L->length;j>=i;j--) {
L->data[j] = L->data[j-1];
}
L->data[i-1] = e;
L->length +=1;
return true;
}
bool ListDelete(PSqList L,int i,int *p) {
if(i<1||i>L->length)
return false;
*p = L->data[i-1];
for(int j =i;j<L->length;j++) {
L->data[j-1] = L->data[j];
}
L->length -=1;
return true;
}
int LocateElem(SqList L,int i) {
for(int j=0;j<L.length;j++) {
if(L.data[j] == i)
return j+1;
}
}
int main(void) {
SqList L;
InitList(&L);
ListInsert(&L,1,1);
ListInsert(&L,2,2);
int e = -1;
ListDelete(&L,1,&e);
int j = LocateElem(L,2);
printf("删除的元素值为:%d\n",e);
printf("目前的链表中元素为:\n");
for(int i=0;i<InitSize;i++)
printf("%d\n",L.data[i]);
printf("需要查找的元素位置为%d\n",j);
return 0;
}