静态顺序表的初始化以及插入删除操作
– 在编写之前首先需要说明,在使用C语言编写时,在自定义外函数(也就是在main函数体之外)体内不能使用 & 符号以及“ . ”符号,取而代之的是 * 号以及“ -> ”符号
1. 首先是静态顺序表结构体的编写
typedef struct
{
int data
[MaxSize
];
int length
;
}Sqlist
;
2. 初始化
void InitList(Sqlist
*L
)
{
L
->length
= 0;
}
3. 插入操作
bool
ListInsert(Sqlist
*L
,int i
,int e
){
if (i
<1||i
>L
->length
+1)
{
return false
;
}
if (L
->length
>=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
++;
return true
;
}
4. 删除操作
在这里我们是按照所在位置进行删除,i 是元素的位置,使用 empt 对删除的元素进行返回
bool
ListDelet(Sqlist
*L
,int i
,int *empt
){
if (L
->length
<1||i
<1||i
>=L
->length
)
{
return false
;
}
*empt
=L
->data
[i
];
for (int j
= i
; j
< L
->length
-1; ++j
)
{
L
->data
[j
]=L
->data
[j
+1];
}
L
->length
--;
return true
;
}
对元素进行查找删除,删除所有对应的元素,这里的 i 是指我们要删除的元素,而 empt 则是用来返回删除的个数
bool
ListValueDelet(Sqlist
*L
,int i
,int *empt
){
if (L
->length
<1)
{
return false
;
}
int k
=0;
for (int j
=0; j
< L
->length
-k
; ++j
)
{
while(L
->data
[j
]==i
){
for (int n
= j
; n
< L
->length
-k
-1; ++n
)
{
L
->data
[n
]=L
->data
[n
+1];
}
++k
;
}
}
*empt
=k
;
L
->length
-=k
;
return true
;
}
完整代码如下
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <string.h>
#define MaxSize 50
#define bool int
#define true 1
#define false 0
typedef struct
{
int data
[MaxSize
];
int length
;
}Sqlist
;
void InitList(Sqlist
*L
)
{
L
->length
= 0;
}
bool
ListInsert(Sqlist
*L
,int i
,int e
){
if (i
<1||i
>L
->length
+1)
{
return false
;
}
if (L
->length
>=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
++;
return true
;
}
bool
ListDelet(Sqlist
*L
,int i
,int *empt
){
if (L
->length
<1||i
<1||i
>=L
->length
)
{
return false
;
}
*empt
=L
->data
[i
];
for (int j
= i
; j
< L
->length
-1; ++j
)
{
L
->data
[j
]=L
->data
[j
+1];
}
L
->length
--;
return true
;
}
bool
ListValueDelet(Sqlist
*L
,int i
,int *empt
){
if (L
->length
<1)
{
return false
;
}
int k
=0;
for (int j
=0; j
< L
->length
-k
; ++j
)
{
while(L
->data
[j
]==i
){
for (int n
= j
; n
< L
->length
-k
-1; ++n
)
{
L
->data
[n
]=L
->data
[n
+1];
}
++k
;
}
}
*empt
=k
;
L
->length
-=k
;
return true
;
}
int main()
{
Sqlist L
;
InitList(&L
);
ListInsert(&L
,1,8);
ListInsert(&L
,2,9);
ListInsert(&L
,3,10);
ListInsert(&L
,4,6);
ListInsert(&L
,5,6);
ListInsert(&L
,6,6);
ListInsert(&L
,7,4);
for (int i
= 0; i
< L
.length
; ++i
)
{
printf("%d ", L
.data
[i
]);
}
printf("顺序表的长度为:%d\n",L
.length
);
int empt
;
ListDelet(&L
,2,&empt
);
printf("删除的元素为:%d\n",empt
);
for (int i
= 0; i
< L
.length
; ++i
)
{
printf("%d ", L
.data
[i
]);
}
printf("顺序表的长度为:%d\n",L
.length
);
int count
;
ListValueDelet(&L
,6,&count
);
printf("删除元素6的次数为:%d\n",count
);
for (int i
= 0; i
< L
.length
; ++i
)
{
printf("%d ", L
.data
[i
]);
}
printf("顺序表的长度为:%d\n",L
.length
);
return 0;
}
输出如下所示
-