篇章二线性表---常见操作
发布日期:2021-06-29 15:42:33 浏览次数:3 分类:技术文章

本文共 2650 字,大约阅读时间需要 8 分钟。

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->data
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

 

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(i
temp) 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->data
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<
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+nb
0) { 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;	}}

 

转载地址:https://codingchaozhang.blog.csdn.net/article/details/85250232 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:回溯法之关于树
下一篇:篇章二线性表---基础知识

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月05日 11时01分48秒