删除顺序表中相同的元素
#include <stdio.h>
#include <stdlib.h>
#define LISTSIZE 10
#define INCREMENT 10
typedef struct
{
int *elem;
int length;
int listsize;
}SqList;
static void InitialList(SqList *L);
static void CreateList(SqList *L);
static void DeleteElem(SqList *L);
static void VisitList(SqList L);
static void DestroyList(SqList *L);
int main(void)
{
SqList L;
InitialList(&L); /* 顺序表初始化*/
CreateList(&L); /* 创建顺序表 */
VisitList(L); /* 打印创建后的顺序表 */
DeleteElem(&L); /* 删除顺序表中的相同元素 */
VisitList(L); /* 打印删除后的顺序表 */
DestroyList(&L); /* 销毁顺序表 */
return 0;
}
static void InitialList(SqList *L)
{
if ((((*L).elem = (int*)malloc(sizeof(int) * LISTSIZE))) == NULL)
{
exit(1);
}
(*L).length = 0;
(*L).listsize = LISTSIZE;
}
static void CreateList(SqList *L)
{
int n, i;
printf("Enter elemenet number n: ");
scanf("%d", &n);
for (i = 0; i < n; i++)
{
scanf("%d", &(*L).elem[(*L).length++]);
if ((*L).length >= (*L).listsize)
{
if ((((*L).elem = (int*)realloc((*L).elem, sizeof(int) * ((*L).listsize + INCREMENT)))) == NULL)
{
exit(1);
}
}
}
}
static void DeleteElem(SqList *L)
{
int i, j, *p, *q;
for (i = 0; i < (*L).length - 1; i++)
{
for (j = i + 1; j < (*L).length; j++)
{
if ((*L).elem[i] == (*L).elem[j])
{
p = &(*L).elem[j];
for (q = p + 1; q < &(*L).elem[(*L).length]; q++)
{
*(q - 1) = *q;
}
(*L).length--;
}
}
}
}
static void VisitList(SqList L)
{
int i;
for (i = 0; i < L.length; i++)
{
printf("%d ", L.elem[i]);
}
printf("\n");
}
static void DestroyList(SqList *L)
{
if ((*L).elem != NULL)
{
free((*L).elem);
(*L).elem = NULL;
}
(*L).length = 0;
}