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<R[j];j--)
R[j]=R[j+1];
R[j+1]=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->data<q->data)
{
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<j;i++,j--)
{
temp=L.data[i];
L.data[i]]=L.data[j];
L.data[j]=temp;
}
}
4.从一给定的顺序表中删除下标i-j
void delete(Sqlist &L,int i,int j)
{
int k,deleta;
deleta=j-i+1;
for(k=j+1;k<L.length;k++)
L.data[k-deleta]=L.data[k];
L.length=deleta;
}
5.顺序表整型数据,将L中所有小于表头元素放前面,大于表头元素的放在后半部分。
void move(Sqlist &L)
{
int i,j;int temp;
i=0,j=L.length-1;
temp=L.data[i];
while(i<j)
{
while(i<j&&L.data[j]>temp)
j--;
if(i<j)
{
L.data[i]=L.data[j];
i++;
}
while(i<j&&L.data[i]<temp)
i++;
if(i<j)
{
L.data[j]=L.data[i];
j--;
}
}
L.data[i]=temp;
}
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->data<minp->data)
{
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<<L->data;
}
}
11.除去最大公共前缀后子表比较大小
int compare(float A[],int An,float B[],int Bn)
{
int i=0;
while(i<An&&i<Bn)
{
if(fabs(A[i]-B[i])<MIN)
i++;
else
break;
}
if(i>=An&&i>=Bn)
return 0;
else if(i>=An&&i<Bn||A[i]<B[i])
return -1;
else
return 1;
}
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<<p->data;
return 0;
}
}
13.对两个非递减有序的顺序表A,B进行合并,合并后的结果放A[]中
int comb(int A[],int &na,int B[],int nb)
{
if(na+nb<maxsize)
return -1;
int i=na,j=nb;
while(j>0)
{
if(i==0||A[i-1]<B[j-1])
{
A[j+i-1]=B[j-1];
--j;
}
else
{
A[j+i-1]=A[i-1];
--i;
}
}
}
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;
}
}
最后
以上就是潇洒玉米最近收集整理的关于篇章二线性表---常见操作的全部内容,更多相关篇章二线性表---常见操作内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复