昨天重学了一下顺序表,写个轮子练练手
#include
#include
typedef struct seqlist
{
int *pdata;
int maxLength;
int length;
}seqlist_t;
int seqlist_init(seqlist_t *list, int length){
if(length > 0){
list->pdata = (int *)malloc(sizeof(int) * length);
if(list->pdata == NULL){
return -1;
}
list->length = 0;
list->maxLength = length;
return 0;
}
return -1;
}
int seqlist_delete(seqlist_t *list){
if(list->pdata != NULL){
free(list->pdata);
list->pdata = NULL;
return 0;
}
return -1;
}
int seqlist_print(seqlist_t list){
if(list.pdata == NULL || list.length == 0){
printf("list empty\n");
return -1;
}
for(int i=0; i<list.length; i++){
printf("%d ",list.pdata[i]);
}
printf("\n");
return 0;
}
int seqlist_insert_head(seqlist_t *list, int val){
if(list->pdata == NULL || list->length < 0){
return -1;
}
if(list->length >= list->maxLength){
printf("list full\n");
return -1;
}
for(int i=list->length; i>0; i--){
list->pdata[i] = list->pdata[i-1];
}
list->pdata[0] = val;
list->length++;
return 0;
}
int seqlist_insert_tail(seqlist_t *list, int val){
if(list->pdata == NULL || list->length < 0){
return -1;
}
if(list->length >= list->maxLength){
printf("list full\n");
return -1;
}
list->pdata[list->length] = val;
list->length++;
return 0;
}
int seqlist_insert_index(seqlist_t *list, int index, int val){
if(list->pdata == NULL || list->length < 0){
return -1;
}
if(list->length >= list->maxLength){
printf("list full\n");
return -1;
}
if(index < 0 || index > list->length){
printf("invalid index\n");
return -1;
}
if(index == 0){
seqlist_insert_head(list, val);
}
else if(index == list->length){
seqlist_insert_tail(list, val);
}
else {
for(int i=list->length; i>index; i--){
list->pdata[i] = list->pdata[i-1];
}
list->pdata[index] = val;
list->length++;
}
return 0;
}
int seqlist_remove_index(seqlist_t *list, int index){
if(list->pdata == NULL || list->length <= 0){
printf("list empty\n");
return -1;
}
if(index < 0 || index >= list->length){
printf("invalid index\n");
return -1;
}
for(int i=index; i<list->length-1; i++){
list->pdata[i] = list->pdata[i+1];
}
list->length--;
return 0;
}
int seqlist_remove_val(seqlist_t *list, int val){
if(list->pdata == NULL || list->length <= 0){
printf("list empty\n");
return -1;
}
for(int i=0; i<list->length; i++){
if(list->pdata[i] == val){
for(int j=i; j<list->length-1; j++){
list->pdata[j] = list->pdata[j+1];
}
list->length--;
return 0;
}
}
printf("invalid val\n");
return -1;
}
int seqlist_search_val(seqlist_t *list, int val){
if(list->pdata == NULL || list->length <= 0){
printf("list empty\n");
return -1;
}
for(int i=0; i<list->length; i++){
if(list->pdata[i] == val){
printf("list[%d] = %d\n", i, val);
return 0;
}
}
printf("invalid val\n");
return -1;
}
int seqlist_change_index(seqlist_t *list, int index, int val){
if(list->pdata == NULL || list->length <= 0){
printf("list empty\n");
return -1;
}
if(index < 0 || index >= list->length){
printf("invalid index\n");
return -1;
}
list->pdata[index] = val;
return 0;
}
int main(int argc, char const *argv[])
{
int ret = 0;
seqlist_t list = {0};
ret = seqlist_init(&list,10);
if(ret == 0){
printf("初始化成功\n");
}
// list.pdata[0] = 5;
// list.pdata[1] = 2;
// list.pdata[2] = 0;
// list.length = 3;
for(int i=0; i<8; i++){
//seqlist_insert_head(&list, i);
seqlist_insert_tail(&list, i);
}
seqlist_print(list);
seqlist_insert_index(&list,3,5);
seqlist_print(list);
seqlist_remove_index(&list,3);
seqlist_print(list);
seqlist_remove_val(&list, 5);
seqlist_print(list);
seqlist_remove_val(&list, 15);
seqlist_print(list);
seqlist_search_val(&list, 3);
seqlist_search_val(&list, 13);
seqlist_change_index(&list,3,13);
seqlist_print(list);
ret = seqlist_delete(&list);
if(ret == 0){
printf("删除成功\n");
}
return 0;
}