《数据结构打卡》第8天(单链表)

《数据结构打卡》第8天

0、编写一个算法,要求将奇数最先输出,偶数最后输出。

void fun(ElemType a[],int n)
{ int i; ElemType e;
	SqStack *st1,*st2;
	InitStack(st1);
	InitStack(st2);
	for (i=0;i<n;i++)
		if (a[i]%2==1)
			Push(st1,a[i]);
		else
			Push(st2,a[i]);
			i=0;
	while (!StackEmpty(st1))
	{ 
		Pop(st1,e);
		a[i++]=e;
	}
	while (!StackEmpty(st2))
	{ 
		Pop(st2,e);
		a[i++]=e;
	}
	DestroyStack(st1);
	DestroyStack(st2);
}

答:算法的执行步骤如下:
(1)扫描数组 a,将所有奇数进到 st1 栈中,将所有偶数进到 st2 栈中。
(2)先将 st1 的所有元素(奇数元素)退栈,并放到数组 a 中并覆盖原有位置的元素;
再将 st2 的所有元素(偶数元素)退栈,并放到数组 a 中并覆盖原有位置的元素。
(3)销毁两个栈 st1 和 st2。
所以本算法的功能是,利用两个栈将数组 a 中所有的奇数元素放到所有偶数元素的前
面。例如,ElemType a[]={1,2,3,4,5,6},执行算法后数组 a 改变为{5,3,1,6,4,2}。

1、设顺序表va中的数据元素递增有序。试设计一个算法,将x插入到顺序表的适当位置上,以保持该表的有序性。(10分)

void  Insert_SqList(SqList va,int x)/*把x插入递增有序表va中*/
{ int i;
  if(va.length> MAXSIZE) return;
  for(i=va.length-1;va.elem[i]>x&&i>=0;i--)
         va.elem[i+1]=va.elem[i];
  va.elem[i+1]=x;
  va.length++;
}/*Insert_SqList*/

2、编写算法,实现带头结点单链表的逆置算法(10分)
算法思路:首先把头结拆下来,然后使用头插法的方式依次把每个结点倒序接入到头结点之后。
带头结点单链表的逆置算法

void Reverse_L(Linklist &L){
	if(!p->next || !p->next->next) return; //若为空表或表长为1时不做处理
	Lnode *p,*r;
	p = L->next;  //p指向首元结点
	L->next = Null;  //拆开头结点,指针域设为空
	while(p!=Null){
		r = p->next; //r暂存p的后继结点
		p->next = L->next; //采用头插法,将p结点插入到头结点之后
		L->next = p; //头结点始终指向新插入的结点
		p = r;  //结点插入完以后,p指向下一结点
	}
}

3、已知指针 Ta和 Tb分别指向两个单链表的头结点,设计一个算法将这两个链表连接在一起(即令其中一个表的首元结点连在另一个表的最后一个结点之后)

发布了20 篇原创文章 · 获赞 0 · 访问量 447

猜你喜欢

转载自blog.csdn.net/qq_41240204/article/details/105539296