顺序表操作
#include <stdio.h>
#include <stdlib.h>
#define INIT_SIZE 10000
typedef struct
{
int data[INIT_SIZE];
int length;
int listsize;
} SeqList;
SeqList InitList()
{
SeqList tt;
tt.length = 0;
tt.listsize = INIT_SIZE;
return tt;
}
int listInsert(SeqList *pL, int i, int value)
{
int j;
if (i > pL->length || i < 0 || pL == NULL)
return -1;
if (pL->length >= pL->listsize)
return -2;
for (j = pL->length; j > i; j--)
pL->data[j] = pL->data[j - 1];
pL->data[j] = value;
pL->length++;
return 0;
}
int getValue(SeqList *pL, int i)
{
if (i < 0 || i > pL->length - 1 || pL == NULL)
return -1;
return pL->data[i];
}
void printAll(SeqList *pL)
{
int i;
if (pL == NULL)
return;
for (i = 0; i < pL->length; i++)
printf("%d ", getValue(pL, i));
return;
}
int delet_special(SeqList *pL, int value)
{
int j, k = 0;
while (pL->data[k] != value || k > pL->length)
{
k++;
}
if (k < pL->length)
{
for (j = k; j < pL->length; j++)
pL->data[j] = pL->data[j + 1];
pL->length--;
return 0;
}
else
return -1;
}
void delet_index_value(SeqList *pL, int index)
{
int j;
if (index > pL->length || index < 0)
{
exit(0);
}
else
{
for (j = index; j < pL->length; j++)
pL->data[j] = pL->data[j + 1];
pL->length--;
}
}
int return_the_length(SeqList *pL)
{
return pL->length;
}
void merge(SeqList *p1, SeqList *p2)
{
int i, j;
int temp;
if ((p1->length) + (p2->length) > (p1->listsize))
{
return;
}
else
{
temp = p1->length;
p1->length += p2->length;
for (i = temp; i < (p1->length); i++)
{
for (j = 0; j < ((p1->length) - i); j++)
p1->data[i] = p2->data[j];
}
}
}
int main()
{
SeqList list1, list2;
SeqList *pList = &list1;
list1 = InitList();
list2 = InitList();
listInsert(&list2, 0, 10);
listInsert(&list1, 0, 10);
listInsert(&list1, 1, 20);
listInsert(pList, 2, 40);
listInsert(&list1, 2, 30);
listInsert(&list1, 0, 5);
listInsert(&list1, list1.length, 50);
puts("List1");
printAll(&list1);
delet_special(pList, 10);
puts("\n删除值为10的元素");
printAll(&list1);
puts("");
puts("删除第2个元素 i从0开始编号");
delet_index_value(pList, 2);
printAll(&list1);
puts("");
puts("List2");
printAll(&list2);
puts("\n合并后");
merge(&list1, &list2);
printAll(&list1);
printf("\n表长为%d\n", return_the_length(&list1));
return 0;
}