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

来源:互联网 发布:443端口入侵教程 编辑:程序博客网 时间:2024/06/03 06:33
  • 顺序表删除最小元素,返回被删元素的值,空出来的位置由最后一个一个元素填补。
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<L.length;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;i<L.length;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;j<L.length;j++)     if(L.data[i]<L.data[j])  //找到后元素后移        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(i<A.length && j<B.length)     {         if(A.data[i]<=B.data[j])           C.data[k++]=A.data[i++]         else            C.data[k++]=B.data[j++];     }   while (i<A.length)     C.data[k++]=A.data[i++];   while (j<B.length)     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]<x) low=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;}}
1 0