线性表的顺序表示习题
Posted ikigai18
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线性表的顺序表示习题相关的知识,希望对你有一定的参考价值。
从顺序表中删除具有最小值的元素(假设唯一),并由函数返回被删除元素的值。空出的位置由最后一个元素填补,若顺序表为空则显示错误信息并退出
bool Del_Min(SqList &L,int &value){ //删除顺序表L中最小元素的结点,并通过引用型参数value返回其值 //删除成功返回true if(L.length==0) return false; value=L.data[0]; int pos=o;//下标 for(int i=1;i<L.length;i++) if(L.data[i]<value){ value=L.data[i]; pos=i;} L.data[pos]=L.data[L.Length-1]; L.length--; return true; }
设计一个高效的算法,将顺序表的所有元素逆置,要求复杂度O(1) void Reverse(Sqlist %L){ int 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; } }
长度为n的顺序表L,编写一个时间复杂度O(n),空间复杂度O(1),删除线性表中所有值为x的数据元素 void del_x_l(Sqlist &L,int x){ int k=0; //记录不等于x的元素个数 for(int i=0;i<L.length;i++) if(L.data[i]!=x){ L.data[k]=L.data[i];//留下 k++; } L.length=l; }
从有序顺序表中删除其值为定值s与t之间(包含st,要求是s<t)的所有元素,如果s t不合理或顺序表为空则显示错误信息并返回 bool Del_s_t(Sqlist &L,int s,int t){ int i,j; if(s>=t||L.length==0) return false; for(i=0,i<L.length&&L.data[i]<s;i++) //寻找值>=s的第一个元素 if(i>=L.length) return false; for(j=i;j<L.length&&L.data[j]<=t;j++) //寻找值>t的第一个元素 for(;j<L.length;i++,j++) L.data[i]=L.data[j]; L.length=i+1; return true; }
从顺序表中删除其值为定值s与t之间(包含st,要求是s<t)的所有元素即值为st的也要删除,如果s t不合理或顺序表为空则显示错误信息并返回 /**算法思想:从前向后扫描顺序表,用k记录元素值在s-t之间的元素的个数(初始k=0) 对于当前扫描的元素,若其值不在st之间,则前移k个位置,否则执行k++**/ bool del_s_t1(Sqlist &L,int s,int t){ int k,i=0; if(L.length==0||s>=t) return false; for(i=0;i<L.length;i++){ if(L.data[i]>=s&&L.data[i]<=t) k++; else L.data[i-k]=L.data[i]; } L.length-=k; return true; }
从有序数组中删除所有其值重复的元素,使表中所有元素的值均不同 bool delete_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; return true; }
将两个有序顺序表合并成一个新的有序顺序表,并由函数返回结果顺序表 bool Merge(Sqlist A,Sqlist B,Sqlist &c){ if(A.length+B.length>C.maxsize) return false; int i=o,j=o,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+1; return true; }
以上是关于线性表的顺序表示习题的主要内容,如果未能解决你的问题,请参考以下文章