您的位置:首页 > 其它

顺序表应用1:多余元素删除之移位算法

2016-08-06 10:24 225 查看
#include<stdio.h>

#include<malloc.h>

#include<iostream>

using namespace std;

#define max 10000

typedef struct

{

 int *elem;

 int length;

 int size;

}list;

int init(list &L,int n)

{

 L.elem=(int *)malloc(n*sizeof(int));

 if(!L.elem) return -1;

 L.size=max;

 return 0;

}

void create(list &L,int n)

{

 int i;

 L.length=n;

 for(i=0;i<n;i++)

     scanf("%d",&L.elem[i]);

}

void purge(list &L)

{

 int i,j,k;

 for(i=0;i<L.length-1;++i)

 {

  j=i+1;

  while(j<L.length)

   if(L.elem[j]!=L.elem[i])

    ++j;

   else

   {

    for(k=j+1;k<L.length;++k)

        L.elem[k-1]=L.elem[k];

    --L.length;

   }

 }

}

int main()

{

 list L;

 int i,n,d,T;

 scanf("%d",&T);

 while(T)

 {

  scanf("%d",&n);

  init(L,n);

  create(L,n);

  purge(L);

  for(i=1;i<=L.length;i++)

  {

   printf("%d%c",L.elem[i-1],(i==L.length)?'\n':' ');

  }

  T--;

 }

 return 0;

}

/**************************************

 Problem id : SDUT OJ B

 User name : wy150428臧志栋

 Result  : Accepted

 Take Memory : 544K

 Take Time : 20MS

 Submit Time : 2016-08-03 10:02:34 

**************************************/

 

算法介绍:遍历顺序表,将第一个和最后一个位置的元素记录后,利用后一个标记值判断是否与第一个位置的元素相同,

若相同则与顺序表最后一个元素互换,指针后移,尾指阵前移,顺序表长度减一,依次进行上述操作
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: