建表
(尾插法)
(头插法)
逆置
链表逆置
取最值
链表取值
线性表归并
- void mergearray(int a[],int m, int b[],int n,int c[]){
- int i=0,j=0;
- int k=0;
- while(i<m && j<n){
- if(a[i]<b[j])
- c[k++} = a[i++];//c[k] =a[i];k++;i++;
- else
- c[k++]=b[j++]
- }
- while(i<m)
- c[k++] = a[i++]
- while(j<n)
- c[k++]=b[j++];
- }
链表归并
void merge(LNode *A,LNode *B,LNode *&C){
LNode *p=A→next;
LNode *q=B→next;
C=A;
C→next = NULL;
- free(B);
- r=C;
- while(p!=NULL && q!=NULL){
- if(p→ data <= q→ data){
r→ next = p;
p = =p→next;
r = r→ next;
}
else{
r→ next = q;
q = =q→next;
r = r→ next;
}
}
if(p!=NULL) r→ next = p;
if(q!=NULL) r→ next = q;
}
划分
以数组第一个元素为枢轴(代码)
- void parttion(int arr[],int n){
- int temp;
- int i=0,j=n-1;
- temp = arr[i];
- while(i<j){
- while(i<j && arr[j]>=temp) --j;
- if(i<j){
- arr[i]=arr[j];
- ++i;
- }
- while(i<j && arr[i]<temp) ++i;
- if(i<j){
- arr[j]=arr[i];
- --j;
- }
- }
- arr[i] = temp;
- }
以数组任意一个元素为界限(代码)
- void parttion(int arr[],int n,int comp){
- int temp;
- int i=0,j=n-1;
- temp = arr[i];
- while(i<j){
- while(i<j && arr[j]>=comp) --j;
- if(i<j){
- arr[i]=arr[j];
- ++i;
- }
- while(i<j && arr[i]<comp) ++i;
- if(i<j){
- arr[j]=arr[i];
- --j;
- }
- }
- arr[i] = temp;
- }
以数组任意一个元素为枢轴 (代码) 讲任意一个元素交换到数组首个位置上
- void parttion(int arr[],int n,int k){
- int temp;
- int i=0,j=n-1;
- arr[0] = arr[k];
- arr[k] = temp;
- temp = arr[i];
- while(i<j){
- while(i<j && arr[j]>=temp) --j;
- if(i<j){
- arr[i]=arr[j];
- ++i;
- }
- while(i<j && arr[i]<temp) ++i;
- if(i<j){
- arr[j]=arr[i];
- --j;
- }
- }
- arr[i] = temp;
- }
- (完)
考研数据结构 - 线性表(续)
来源: http://www.bubuko.com/infodetail-3122178.html