#include <stdio.h>
#include <stdlib.h>
#define OK 1;
typedef int status;
typedef int ElemType;
typedef struct
{
ElemType *elem;
int length;
int listlize;
}SqList;
status InitList(SqList *L,int len) /*顺序表的创建*/
{
L->elem = (int*)malloc(sizeof(int)*len);
L->length = len ;
return OK;
}
void DeleteList(SqList *L,int i)
{
int *p;
int *q;
p = &(L->elem[i]); /*P指向要删去的元素*/
q = L->elem + L->length - 1; /*q指向表尾元素的位置*/
for (*p; p < q; p++) /*后一个元素覆盖前一个元素,实现删除*/
{
*p = *(p + 1);
}
--L->length;/*根据先用后减的原则,--号不能放在L->length的后面,会导致长度不匹配*/
}
int main(void)
{
SqList L;
int len,i;
int *p, *q;
printf("请输入你将要输入数字的个数:");
scanf("%d", &len);
InitList(&L, len);
printf("输入您想输入的数值:");
for (i = 0; i < len; i++)
{
scanf("%d", &L.elem[i]);
printf(" ");
}
printf("\n");
p = L.elem; q = L.elem + 1; /*定义两个指针,q在p的后面,用以查看是否有相同元素*/
i = 1; /*i做为计数器,方便从l中提取元素*/
while (L.length>i) /*while循环中,p先指向头节点,q往下遍历*/
{
if (*p == *q) /*如果*p==*q,则删除数值相同的节点,后面的数往前进一格,然而p和q的指向都不会变*/
{
DeleteList(&L, i);
}
else /*如果*p!=*q,则p和q的指向都往后退(++)*/
{
p++; q++; i++;
}
}
printf("删改后的数据为:\n");
for (i = 0; i < L.length; i++) /*输出数组*/
{
printf("%d\t", L.elem[i]);
}
return 0;
}
