数据结构_1:线性表: C语言练习题

  • 顺序表删除最小元素,返回被删元素的值,空出来的位置由最后一个一个元素填补。
bool Del_min(SqList *L, ElemType *value)
{
   if(L->length==0)
     return ERROR;
   value=L.data[0];
   int pos=0;   //假定零号最小
   for(int i=1;i//循环寻找最小值
     if()

}

  • 逆置顺序表的所有元素
//对于元素L.data[i] (i属于[0,L.length/2]),将其与L.data[L.lenghth-i-1]交换

void Reverse(SqList *L)
{
    ElemType temp;
    for(i=0;i<L.length/2;i++)
    { 
       temp=L.data[i];
       L.data[i]=L.data[L.length-i-1];
       L.data[L.length-i-1]=temp;
    }
}

  • 删除线性表中所有值为x的数据元素
//A1: 用k基类L中不等于x的元素个数,边扫描,边统计k,并将不等于x的元素向前放置k个位置,最后修改k的值

void del_x_1(SqList *L,ElemType x)
{
    int k=0;
    for(int i=0;ilength;i++)
      if(L.data[i]!=x)
        {
            L.data[k]=L.data[i];
            k++;
        }
   L.length=k;
}

//A2: 

  • 删除有序表中所有重复元素
bool Del_Same(SqList *L)
{
   if(L.length==0)
     return false;
   int i,j;  //i存储第一个不相同的元素,j是工作指针
   for(i=0,j=1;jlength;j++)
     if(L.data[i]//找到后元素后移
        L.data[++i]=L.data[j];
     L.length=i+1;
}

  • 两个有序表合成一个有序表
bool Merge(SqList A,SqList B, SqList *C)
{
   if(A.length+B.length>c.maxsize) 
      return falseint i=0,j=0,k=0;
   while(ilength && jlength)
     {
         if(A.data[i]<=B.data[j])
           C.data[k++]=A.data[i++]
         else 
           C.data[k++]=B.data[j++];
     }

   while (ilength)
     C.data[k++]=A.data[i++];
   while (jlength)
     C.data[k++]=B.data[j++];
   C.length=k;
   return false;
}
  • 线性表互换 ,数组A[M+N]中有两个线性表(a1,..am)和(b1,…bm);写一个函数将两个表互换,即将(b1,…bn)放到(a1,..am)的前面
typedef int DatatType;
void Reverse(DataType A[],int left,int right,int arraysize)
{
   if(left>=right || right>=arraySize) return;
   int mid>=(left+right)/2;
   for(int i=0;i<=mid-left;i++)
   {
      DataType temp=A[left+i];
      A[left+i]=A[right-i];
      A[right-i]=temp;
   }
}

void Exchange(DataType A[],int m,int n, int arraySize)
{  
    Reverse(A,0,m+n-1,arraysize);
    Reverse(A,0,n-1,arraysize);
    Reverse(A,n,m+n-1,arraysize);
}

  • 查找顺序表的值为x的元素
void SearchExchangeInsert(ElemType A[],ElemType x)
{
   int low=0,high=n-1;
   while(low<=high)
   {
      mid=(low+high)/2;
      if(A[mid]==x)  break;
      else if(A[mid]mid+1;
      else high=mid-1;
   }

if(A[mid]==x && mid!=n-1)
{
    t=A[mid];
    A[mid]=A[mid+1];
    A[mid+1]=t;
}

if(low>high)
{
   for(i=n-1;i>high;i--)
     A[i+1]=A[i];
     A[i+1]=x;
}
}

你可能感兴趣的:(数据结构)