데이터 구조 선형 표 의 순서 실현
55664 단어 데이터 구조 코드 구현선형 표 순서 구현데이터 구조
#include
#include
#include
#define MAXSIZE 100 //
typedef struct sq_list
{
int ListData[MAXSIZE + 1]; //
int len; //
}sq_list;
void Init(sq_list *L)
{
L->len = 0;
}
int length(sq_list *L)
{
return (L->len);
}
void PrintL(sq_list *L)
{
for (int i = 0; i < L->len; i++)
{
printf("%d", L->ListData[i]);
}
printf("
");
}
/* 1 */ //
int Add(sq_list *L, int data)
{
if (L->len >= MAXSIZE)
{
printf("
");
return 0;
}
L->ListData[++L->len] = data;
return 1;
}
/* 2 */ // ( )
int insert(sq_list *L, int n, int data)
{
int i;
if (L->len >= MAXSIZE)
{
printf("
");
return 0;
}
if (n < 0 || n>L->len - 1)
{
printf("
");
return 0;
}
for (i = L->len-1; i >= n; i--)
{
L->ListData[i + 1] = L->ListData[i];
if (i == n)
{
L->ListData[n] = data;
L->len++;
}
}
return 1;
}
/* 3 */ //
void insert_one(sq_list *s, int x)
{
int begin = 0;
int end = s->len - 1;
int mid;
int tmp;
int i;
while (begin <= end)
{
mid = (begin + end) / 2;
if (s->ListData[mid] == x)
{
break;
}
else if (s->ListData[mid] > x)
{
end = mid - 1;
}
else
{
begin = mid + 1;
}
}
if (s->ListData[mid] == x && mid != s->len - 1)
{
tmp = s->ListData[mid];
s->ListData[mid] = s->ListData[mid + 1];
s->ListData[mid + 1] = tmp;
}
// 1 3 5 7 9 6
if (begin > end)
{
printf("%d %d
", begin, end);
for (i = s->len; i > end; i--)
{
s->ListData[i + 1] = s->ListData[i];
}
s->ListData[i + 1] = x;
s->len++;
}
}
/* 4 */
void insert_sort(sq_list *L)
{
int tmp, j;
for (int i = 0; i < L->len - 1; i++)
{
tmp = L->ListData[i + 1];
for (j = i + 1; j >= 1 && tmp < L->ListData[j - 1]; j--)
{
L->ListData[j] = L->ListData[j - 1];
}
L->ListData[j] = tmp;
}
}
/* 1 */
int Delete(sq_list* L, int n)
{
int i;
if (L->len == 0)
{
printf("
");
return 0;
}
if (n < 0 || n > L->len - 1)
{
printf(" , !
");
return 0;
}
for (i = n;i<=L->len-1;i++)
L->ListData[i] = L->ListData[i + 1];
L->len--;
return 1;
}
/* 2 */
int DelMin(sq_list *L)
{
int min = L->ListData[0];
int pos = 0;
if (L->len == 0)
{
printf("
");
return 1;
exit(1);
}
for (int i = 1; i < L->len; i++)
{
if (L->ListData[i] < min)
{
pos = i;
min = L->ListData[pos];
}
}
L->ListData[pos] = L->ListData[L->len - 1];
L->len--;
return min;
}
/* 3 */
int DelABSorted(sq_list *L, int a, int b)
{
int i, j, len;
if (L->len == 0)
{
printf("
");
return 0;
}
if (a > b)
{
printf("a and b error
");
return 0;
}
for (i = 0; i < L->len; i++)
if (L->ListData[i] > a)
break;
for (j = 0; j < L->len; j++)
if (L->ListData[j] > b)
break;
len = L->len - (j - i);
for (; j < L->len; j++)
{
L->ListData[i] = L->ListData[j];
i++;
}
L->len = len;
}
/* 4 */
int DelABUnSorted(sq_list *L, int a, int b)
{
int len = L->len;
int j = 0;
if (L->len == 0)
{
printf("
");
return 0;
}
if (a > b)
{
printf("a and b error
");
return 0;
}
for (int i = 0; i < L->len; i++)
{
if (L->ListData[i] < a || L->ListData[i] > b)
{
L->ListData[j++] = L->ListData[i];
}else
{
len--;
}
}
L->len = len;
// L->len = j;
return 1;
}
/* */
int *FindByNum(sq_list *L, int n)
{
if (n < 0 || n > L->len - 1)
{
printf("
");
return 0;
}
return &(L->ListData[n]);
}
/* */
void unique_sorted(sq_list *s)
{
int i;
int j = 0;
int len = s->len;
for (i = 1; i < s->len; i++)
{
if (s->ListData[j] != s->ListData[i])
{
s->ListData[j + 1] = s->ListData[i];
j++;
}
else
{
len--;
}
}
s->len = len;
}
/* L1 L2
L1 L2 L3,L3 ( L1 L2)*/
void merge(sq_list *L1, sq_list *L2,sq_list *L3)
{
int i = 0;
int j = 0;
int k = 0;
while (i <= L1->len-1 && j <= L2->len-1) // i< len ;
// len , i、j 。 i <= L1->len,
{
if (L2->ListData[j] <= L1->ListData[i])
{
L3->ListData[k++] = L2->ListData[j++];
}
else
{
L3->ListData[k++] = L1->ListData[i++];
}
}
while (i <= L1->len)
{
L3->ListData[k++] = L1->ListData[i++];
}
while (j <= L2->len)
{
L3->ListData[k++] = L1->ListData[j++];
}
L3->len = k - 1;
}
int main()
{
sq_list L0 = { {1,2,3,4,5},5 }; printf("%d
", L0.len);PrintL(&L0);
insert(&L0, 0, 8); printf("%d
", L0.len);PrintL(&L0);
Delete(&L0, 0); printf("%d
", L0.len); PrintL(&L0);
sq_list L11 = { {1,3,5,7,4,2},6 };
//insert_sort(&L11); PrintL(&L11);
DelABUnSorted(&L11, 3, 7); PrintL(&L11);
sq_list s1 = { {3, 2, 21, 3, 9, 5, 2, 7, 5, 9, 9, 2}, 12 };
insert_sort(&s1);
PrintL(&s1);
unique_sorted(&s1);
PrintL(&s1);
printf("----------------
");
sq_list L1 = { {1,3,5,7,9,11,13,15,17,19},10 };
sq_list L2 = { {2,3,4,5,6},5 };
sq_list L3;
merge(&L1, &L2, &L3);
PrintL(&L3);
system("pause");
return 0;
}
잘못 이 있 으 면 지적 해 주 십시오. 감사합니다.