顺序表编程考点
Posted 樱桃挚爱丸子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了顺序表编程考点相关的知识,希望对你有一定的参考价值。
顺序表编程考点
1、顺序表删除算法
//顺序表删除算法 typedef struct{ Elemtype *elem; int length; int listsize; }Sqlist; int ListDelete_sq(Sqlist *L,int i) //删除顺序表L中的第i个元素 { int k; if(i<1 || i>L->length) //删除位置出错 return 0; for(k = i;k< L->length; k++) //从第i+1个位置开始,每个元素前移一个位置 L->slist[k] = L->slist[k+1]; --L->length; //表的长度减1 return 1; //返回成功 }
2、将两个非递减有序顺序表A和B合并成一个新的非递减有序顺序表
//将两个非递减有序顺序表A和B合并成一个新的非递减有序顺序表 typedef struct{ Elemtype *elem; int length; int listsize; }Sqlist; void merge(Sqlist A,Sqlist B,Sqlist &C) { int i=0,j=0,k=0; //A、B、C三个数组指针i、j、k while(i<A.length && j<B.length) //退出循环的条件 { if(A.elem[i]<=B.elem[j]) //如果A.elem[i]<=B.elem[j] { C.elem[k]=A.elem[i]; //将A.elem[i]接在数组C的k位置 i++; //数组A和数组C的数组指针加1 k++; } else //如果A.elem[i]>B.elem[j] { C.elem[k] = B.elem[j]; //将A.elem[j]接在数组C的k位置 j++; //数组B和数组C的数组指针加1 k++; } } while(i<A.length) //数组A还有元素但是B中所有元素均在C中 { C.elem[k] = A.elem[i]; //依次将数组A中剩余元素接在C表表尾 i++; k++; } while(j<B.length) //数组B还有元素但是A中所有元素均在C中 { C.elem[k] = B.elem[j]; //依次将数组A中剩余元素接在C表表尾 j++; k++; } C.length = k; //将A、B数组全部接完,表C长为原A、C表长之和 }
3、顺序表元素递增有序,将x插入到顺序表以后,保持该表的有序性
//顺序表元素递增有序,将x插入到顺序表以后,保持该表的有序性 typedef struct{ Elemtype *elem; int length; int listsize; }Sqlist; void InserSqlist(Sqlist &va, int x) { int i; if(va.length >Maxsize) return; for(i = va.length-1; va.elem[i]>x && i>=0;i--) va.elem[i+1]=va.elem[i]; va.elem[i+1]=x; va.length++; }
4、试写一个算法,实现顺序表的就地逆置
//试写一个算法,实现顺序表的就地逆置 void reverse(int a[],int size) { int i, j, tmp; for(i=0,j=size-1;i<j;i++,j--) { tmp=a[i]; a[i]=a[j]; a[j]=tmp; } }
5、将顺序表中正、负整数分开
//将顺序表中正、负整数分开 void part(int array[],int n) { int i,j; i=1; j=n; while(i<j) { while(i<j && array[i]<0) //i指针从前往后扫描数组,遇到比0大的值停下 i++; while(i<j && array[j]>=0) //j指针从前往后扫描数组,遇到比0小的值停下 j--; if(i<j) //如果i<j,交换两个指针分别指向的元素 { array[0]=array[i]; array[i]=array[j]; array[j]=array[0]; } } }
6、将数组中的数按照从大到小的顺序排序
//将数组中的数按照从大到小的顺序排序 void ReArrange( int A[], int B[], int n) { for(i=0; i<n; i++) B[n-A[i]] = A[i]; }
7、折半查找查找数值为x的值
//折半查找查找数值为x的值 void SearchExchangeInsert(Elemtype a[],elemtype x) { low = 0; //low和high指向线性表下界和上界的下标 high = n-1; while(low <= high) { mid = (low +high)/2; //找中间位置 if(a[mid] == x) //找到x,退出while循环 break; else if(a[mid] < x) low = mid +1; //到中点mid的右半去查 else high = mid - 1;//到中点mid的左半去查 } if(a[mid]==x && mid != 0) //若最后一个元素与x相等,则不存在与其后继交换的操作 { t=a[mid]; a[mid] = a[mid+1]; a[mid+1] = t; } //数组x与其后继元素位置交换 if(low > high) //查找失败,插入数据元素x { for(i = n-1; i>high;i--) a[i+1] = a[i]; //后移元素 a[i+1] = x; //插入x }//结束插入 }//结束算法
以上是关于顺序表编程考点的主要内容,如果未能解决你的问题,请参考以下文章