C_DS_AIgo/sq_list.c

182 lines
3.8 KiB
C
Raw Permalink Normal View History

2025-03-17 14:00:57 +08:00
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "sq_list.h"
sq_list* init_sq_list(void)
2025-03-17 14:00:57 +08:00
{
sq_list* name = (sq_list*)malloc(sizeof(sq_list));
2025-03-25 21:50:02 +08:00
if (name == NULL)
{
printf("error: malloc failed![From init_sq_list]\n");
return NULL;
}
2025-03-17 14:00:57 +08:00
memset(name, 0, sizeof(sq_list));
2025-03-19 14:42:46 +08:00
return name;
2025-03-17 14:00:57 +08:00
}
2025-03-17 14:24:44 +08:00
// ɾ<><C9BE>
void delete_sq_list(sq_list* list,int pos)
{
if (pos < 0 || pos > list->length || list->length == MAX)
{
printf("λ<EFBFBD>ô<EFBFBD><EFBFBD><EFBFBD>\n");
return;
}
if (pos == list->length - 1)
list->data[pos] = 0;
else
{
for (int i = pos; i < list->length - 1; i++)
list->data[i] = list->data[i + 1];
list->data[list->length - 1] = 0;
}
list->length--;
2025-03-20 22:44:30 +08:00
2025-03-17 14:24:44 +08:00
}
// <20>
void replace_sq_list(sq_list* list, int pos, elem_type value)
2025-03-17 14:24:44 +08:00
{
if (pos < 0 || pos > list->length || list->length >= MAX)
{
printf("λ<EFBFBD>ô<EFBFBD><EFBFBD><EFBFBD>\n");
return;
}
if (pos > list->length && pos <= MAX)
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ˴<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
list->data[pos] = value;
}
// <20><><EFBFBD><EFBFBD>
void insert_sq_list(sq_list* list, int pos, elem_type value)
2025-03-17 14:24:44 +08:00
{
if (pos < 0 || pos > list->length || list->length >= MAX)
{
printf("λ<EFBFBD>ô<EFBFBD><EFBFBD><EFBFBD>\n");
return;
}
if (pos == MAX)
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\n");
2025-03-17 14:33:15 +08:00
if (pos > list->length && pos <= MAX)
2025-03-17 14:24:44 +08:00
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ˴<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
2025-03-17 16:29:06 +08:00
int i = list->length -1;
2025-03-17 14:24:44 +08:00
int flog = i;
2025-03-17 16:29:06 +08:00
for (i; i >= pos-1; i--)
2025-03-17 14:24:44 +08:00
{
list->data[i + 1] = list->data[i];
}
2025-03-17 16:27:15 +08:00
list->data[pos] = value;
2025-03-21 01:14:21 +08:00
/* if (flog + 1 > list->length)*/
2025-03-21 12:31:38 +08:00
list->length++;
2025-03-17 14:24:44 +08:00
}
// <20><>ӡ
void print_sq_list(sq_list* list)
{
2025-03-20 23:34:22 +08:00
printf("[");
2025-03-17 14:24:44 +08:00
for (int i = 0; i < list->length; i++)
printf("%d ", list->data[i]);
2025-03-20 23:34:22 +08:00
printf("]");
2025-03-17 14:24:44 +08:00
printf("\n");
2025-03-20 18:07:55 +08:00
}
2025-03-20 22:44:30 +08:00
//<2F><><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>
void get_sq_list(sq_list* list1, int pos, elem_type*e)
2025-03-20 22:44:30 +08:00
{
if (list1->length == 0 || pos<0 || pos>list1->length)
{
printf("<EFBFBD><EFBFBD>ȡԪ<EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>");
return;
}
*e = list1->data[pos];
return;
}
//<2F><><EFBFBD><EFBFBD>
int locate_list(sq_list* list, elem_type e)
2025-03-20 22:44:30 +08:00
{
int i = 0;
if (list->length == 0)
{
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>");
return;
}
for (i = 0;i < list->length;i++)
{
if (list->data[i] == e)
return 1;
}
if (i > list->length)
{
printf("Խ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
return;
}
return 0;
}
2025-03-21 12:31:38 +08:00
// 2 <20><> 1 <20>ϲ<EFBFBD>
2025-03-20 18:07:55 +08:00
void merge_sq_list(sq_list* list_1, sq_list* list_2)
{
2025-03-20 20:48:08 +08:00
if (list_1->length == 0 || list_2->length == 0)
2025-03-20 18:07:55 +08:00
{
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>ձ<EFBFBD>\n");
2025-03-20 18:07:55 +08:00
return;
}
2025-03-20 20:48:08 +08:00
if ((list_1->length + list_2->length) > MAX)
2025-03-20 18:07:55 +08:00
printf("<EFBFBD>ܺͳ<EFBFBD><EFBFBD><EFBFBD>Χ\n<EFBFBD><EFBFBD><EFBFBD>ǻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϲ<EFBFBD>ֻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϲ<EFBFBD>\n");
2025-03-20 20:48:08 +08:00
int flog = 0;
2025-03-20 18:07:55 +08:00
for (int i = 0; i < list_2->length; i++)
{
2025-03-21 00:59:03 +08:00
for (int j = 0; j < list_1->length; j++)
2025-03-20 20:48:08 +08:00
{
2025-03-20 18:22:19 +08:00
if (list_1->data[j] != list_2->data[i])
2025-03-20 20:48:08 +08:00
{
2025-03-21 00:59:03 +08:00
if (j == list_1->length -1)
{
list_1->data[list_1->length] = list_2->data[i];
list_1->length++;
flog++;
}
else
continue;
2025-03-20 18:07:55 +08:00
}
}
}
2025-03-20 23:34:22 +08:00
printf("----------------------------------\n");
2025-03-21 00:59:03 +08:00
printf("<EFBFBD><EFBFBD>%d<><64><EFBFBD><EFBFBD>ͬ <20><>%d<><64>ͬ\n", flog, list_2->length - flog);
2025-03-20 23:34:22 +08:00
printf("----------------------------------\n");
2025-03-20 18:22:19 +08:00
}
2025-03-21 12:31:38 +08:00
2025-03-20 22:44:30 +08:00
//<2F>ϲ<EFBFBD>2.0
void mer_ge_sq_list(sq_list* list_1, sq_list* list_2)
{
int e;
int k = 0;
2025-03-21 12:31:38 +08:00
int flog = 0;
2025-03-21 01:14:21 +08:00
for (int k=0;k < list_2->length;k++)
2025-03-20 22:44:30 +08:00
{
2025-03-21 01:14:21 +08:00
get_sq_list(list_2, k, &e);
if (!locate_list(list_1, list_2))
2025-03-21 12:31:38 +08:00
{
2025-03-21 01:14:21 +08:00
insert_sq_list(list_1, list_1->length, e);
2025-03-21 12:31:38 +08:00
flog++;
}
2025-03-20 22:44:30 +08:00
}
2025-03-21 12:31:38 +08:00
printf("----------------------------------\n");
printf("<EFBFBD><EFBFBD>%d<><64><EFBFBD><EFBFBD>ͬ <20><>%d<><64>ͬ\n", flog, list_2->length - flog);
printf("----------------------------------\n");
2025-03-20 22:44:30 +08:00
}