篇章二线性表---常见操作

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;
	}
} 

 

你可能感兴趣的:(算法,玩转数据结构与算法)