1.顺序表数组R[],元素0~m+n-1,前m个有序,后n个元素有序递增,使其整体有序
void insertSort(int R[],int n)
{
int i,j,temp;
for(i=m;i<=m+n-1;i++)
{
temp=R[i];
for(j=i-1;j>=0&&temp
2.递增有序的单链表A,B,求出A和B的差集(仅在A出现,而不再B出现)
void differ(LNode *A,LNode *B)
{
LNode *p=A->next;LNode *q=B->next;
LNode *pre=A;
LNode *r;
while(p!=NULL&&q!=NULL)
{
if(p->datadata)
{
pre=p;
p=p->next;
}
else if(p->data>q->data)
q=q->next;
else
{
pre->next=p->next;
r=p;
p=p->next;
free(r);
}
}
}
3.将顺序表中的元素逆置
void reverse(SqList *&L)
{
int i,j;
int temp;
for(i=0,j=L.length-1;i
4.从一给定的顺序表中删除下标i-j
void delete(Sqlist &L,int i,int j)
{
int k,deleta;
deleta=j-i+1;
for(k=j+1;k
5.顺序表整型数据,将L中所有小于表头元素放前面,大于表头元素的放在后半部分。
void move(Sqlist &L)
{
int i,j;int temp;
i=0,j=L.length-1;
temp=L.data[i];
while(itemp)
j--;
if(i
6.递增非空单链表,设计一个算法删除值域重复的结点
void delsll(LNode *L)
{
LNode *p=L->next,*q;
while(p->next!=NULL)
{
if(p->data==p->next->data)
{
q=p->next;
p->next=q->next;
free(q);
}
p=p->next;
}
}
7.删除单链表L中最小值结点
void delminnode(LNode *&L)
{
LNode *pre=L;LNode *p=L->next;
LNode *minpre,minp=p;
while(p!=NULL)
{
if(p->datadata)
{
min=p;
minpre=pre;
}
pre=p;
p=p->next;
}
minpre->next=minp->next;
free(minp);
}
8.带头结点的单链表逆置
void reverse(LNode *L)
{
LNode *p=L->next,*q;
L->next=NULL;
while(p!=NULL)
{
q=p;
p=p->next;
q->next=L->next;
L->next=q;
}
}
9.带头结点单链表分解成两个单链表A,B,A只含data域为奇数结点,B中只含data域为偶数结点
void split(LNode *A,LNode *&B)
{
LNode *p,*q,*r;
B=(LNode*)malloc(sizeof(LNode));
B->next=NULL;
r=B;
p=A;
while(p->next!=NULL)
{
if(p->next->data%2==0)
{
q=p->next;
p->next=q->next;
q->next=NULL;
r->next=q;
r=q;
}
else
p=p->next;
}
}
10.逆序输出单链表中的数据
void reprint(LNode *L)
{
if(L!=NULL)
{
reprint(L->next);
cout<data;
}
}
11.除去最大公共前缀后子表比较大小
int compare(float A[],int An,float B[],int Bn)
{
int i=0;
while(i=An&&i>=Bn)
return 0;
else if(i>=An&&i
12.输出链表中倒数第k个位置上的结点
int findElem(LNode *head,int k)
{
LNode *q=head->next,*p=head;
int i=1;
while(q!=NULL)
{
q=q->next;
i++;
if(i>k)
p=p->next;
}
if(p==head)
return 0;
else
{
cout<data;
return 0;
}
}
13.对两个非递减有序的顺序表A,B进行合并,合并后的结果放A[]中
int comb(int A[],int &na,int B[],int nb)
{
if(na+nb0)
{
if(i==0||A[i-1]
14.L为单链表,试写出下面运算的递归算法
//求链表中的最大整数
int getMax(LNode *L)
{
if(L->next==NULL)
return L->data;
int temp=getMax(L-data);
if(L->data>temp)
return L->data;
else
return temp;
}
//其链表中的结点个数
int getNum(LNode *L)
{
if(L->next==NULL)
return 1;
return 1+getNum(L->next);
}
//求所有整数的平均值
float getAvg(LNode *L,int n)
{
if(L->next==NULL)
return (float)(L->data);
else
{
float sum=getAvg(L->next,n-1)*(n-1);
return (float)(L->data+sum)/n;
}
}