1、顺序表用数组A[]表示,表中元素下标0~m+n-1,前m个后n个元素递增有序,设计算法使整个表有序
void Sort(int A[],int m,int n){
int temp;
for(int i=m;i<m+n;i++){
temp=A[i];
for(int j=i-1;j>0&&temp<A[i];j--) A[j+1]=A[j];
A[j]=temp;
}
}
2、对两个递增有序的单链表AB(带有头结点,分别有mn个元素),设计算法求差集(A中有B中没有的),保存在A表中,并保持有序性。
void difference(Linklist &A,Linklist &B){
Lnode *pa=A->next,*pre=A,*temp,*pb=B->next;
while(pa&&pb){
if(pb->data>pa->data){
pre=pa;
pa=pa->next;
}
else if(pa->data>pb->data){
pb=pb->next;
}
else{
temp=pa;
pre->next=pa->next;
pa=pa->next;
free(temp);
}
}
}
3、逆置顺序表
4、顺序表中删除给定下标 i~j(包括i j 且i<=j)的所有元素,假定ij合法
5、快排划分操作:根据表头元素划分一次
void Quick_sort(Sqlist &l){
int pivot=l.data[0];
int low=0,high=l.length-1;
while(low<high){
while(low<high&&l.data[high]>pivot) --high;
if(low<high) l.data[low]=l.data[high];
while(low<high&&l.data[low]<pivot) ++low;
if(low<high) l.data[high]=l.data[low];
}
l.data[low]=pivot;
}
6、设计算法删除递增单链表中值域重复的结点
7、设计算法删除带头结点单链表的最小值元素
8、逆置带头结点的单链表,不能建立新节点
9、设计算法将带头结点的单链表分解为两个单链表,A表中只含有原表中data域为奇数的结点,B则是偶数,并保持原来的相对顺序
1、带头结点单链表,查找倒数第k个位置上的结点,成功则输出data值并返回1,否则返回0
2、n个整数放到数组R中,将R中的序列循环左移p个位置。
3、若整数序列中,元素值相同的元素个数>总数的一半,则称此元素为主元素。设计算法找序列的主元素,找到则返回元素值,否则返回-1.
int find_main(int A[],int n){
int mainElem=A[0];
int count=1;
for(int i=1;i<n;i++){
if(A[i]==mainElem){
count++;
}
else{
if(count>0) count--;
else{
mainElem=A[i];
count=1;
}
}
}
if(count>0){
for(i=count=0;i<n;i++){
if(A[i]==mainElem) count++;
}
}
if(count>n/2) return mainElem;
esle return -1;
}