因为考研需要,所以现在开始复习数据结构;
后续会持续更新整个数据结构,内容如下:
也是因为考研,很久没有更新博客,也没有写代码了。一时还有点小激动。hhh具体实现见代码注释吧。不得不说,c语言自是有其迷人之处的。
总结一下
关于对地址,与数组的进一步理解
对于使用基地址的形式,可以理解为数组,即基地址的首地址,即为数组的首地址,又因为对其的类型,进行了定义,故当取到首地址的指针(q)时,进行q++,系统会在已知,此类型占多少空间的情况下,跳到下一块地址即下一个元素,即如数组这些之前也有写过,不过因为时间久了,又记不清了,所以再写一次,以求加深记忆欢迎交流指正
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define INIT_SIZE 100
#define INCREMENT 10
#include <stdio.h>
#include <stdlib.h>
typedef int Status
;
typedef int ElemType
;
typedef struct {
ElemType
*elem
;
int length
;
int listsize
;
}Sqlist
;
Status
InitList_sq(Sqlist
&L
) {
L
.elem
= (ElemType
*)malloc(INIT_SIZE
* sizeof(ElemType
));
if (!L
.elem
)
{
return OVERFLOW
;
}
L
.length
= 0;
L
.listsize
= INIT_SIZE
;
return OK
;
}
Status
ListInsert_sq(Sqlist
&L
,int i
,ElemType x
) {
if (i
<1||i
>L
.length
+1)
{
return ERROR
;
}
if (L
.length
>=L
.listsize
)
{
ElemType
* newbase
= (ElemType
*)realloc(L
.elem
, (L
.listsize
+ INCREMENT
) * sizeof(ElemType
));
if (!newbase
)
{
exit(OVERFLOW
);
}
L
.elem
= newbase
;
L
.listsize
+= INCREMENT
;
}
ElemType
*q
= &(L
.elem
[i
- 1]);
for (ElemType
*p
=&(L
.elem
[L
.length
-1]);p
>=q
;--p
)
{
*(p
+ 1) = *p
;
}
*q
= x
;
L
.length
++;
return OK
;
}
Status
ListDelete_sq(Sqlist
& L
, int i
, ElemType
&x
) {
if (i
<1||i
>L
.length
)
{
return ERROR
;
}
ElemType
* p
= &(L
.elem
[i
- 1]);
x
= *p
;
for (ElemType
* q
=&(L
.elem
[L
.length
-1]);p
+1<=q
;p
++)
{
*p
= *(p
+ 1);
}
L
.length
--;
return OK
;
}
Status
ListPrintf_sq(Sqlist
& L
) {
ElemType
* p
= L
.elem
;
int length
= L
.length
;
while (length
--)
{
printf("%d\t", *(p
++));
}
return OK
;
}
int main() {
Sqlist sq
;
InitList_sq(sq
);
for (int i
= 1; i
<= 110; i
++)
{
ListInsert_sq(sq
, i
, i
);
}
ElemType a
=0;
ListDelete_sq(sq
, 20, a
);
ListPrintf_sq(sq
);
printf("\n\n已删除元素,其值为:%d", a
);
printf("\n顺序表当前元素个数:%d\t", sq
.length
);
printf("\n顺序表当前最大容量:%d", sq
.listsize
);
return OK
;
}
添加了从1-120 120个数删除了第二十个数