㈠ 设计一个算法,通过一趟遍历确定在单链表中值最大的节点
#include"stdlib.h"
#include"stdio.h"
#include"time.h"
struct node
{
int data;
struct node *link;
};
void main()
{
int i,max,t;
struct node *head,*u,*v,*p,**h;
randomize();
for(i=1;i<10;i++)
{
u=(struct node *)malloc(sizeof(struct node));
u->link=NULL;
t=rand();
u->data=t;
if(i==1) {head=v=u;}
else {v->link=u;v=u;}
}
max=head->data;
u=head;
for(p=head;p;p=p->link)
if(max<p->data) {max=p->data;u=p;} //最大结点在u中
for(v=head;v;v=v->link)
printf(" %d ",v->data);
printf("\nmax=%d\n",max);
return ;
}
㈡ 谁能一句话解释快速排序算法一趟排序的思想
使小于选定基准的数据在一边,大于的在另一边
而后分而治之
㈢ 设有一个表头为first的单链表,试设计一个算法,通过遍历一趟链表,将链表中所有节点按逆序链接
假设first为指向第一个节点的指针
reverse(first)
{
if(first==NULL)
return NULL;
else if(first->next==NULL)
return first;
p,q,r;
q=first;
p=first->next;
while(p!=NULL)
{
r=p->next;
p->next=q;
q=p
p=r;
}
return q;
}
㈣ 设计一个算法,通过一趟遍历确定长度为n的单链表中值最大的结点。
准备俩变量val和pos,val初值为链表头的值,pos初值为链表头的位置
遍历链表。碰见比val大的值,就把这个值放到val里,再把pos的值换成当前结点的位置。
遍历完了之后pos的值是就是最大值所在的结点,val是最大值。
……这个算法很难想吗?这个算法都想不出来的话您是咋学编程的?
㈤ 设有一个表头为first的单链表,式设计一个算法,通过遍历一趟链表,将链表中所有节点按逆序链接
算法思想
一次遍历链表,并将结点指针反转,在逆置的时候要注意单链表两端的处理(即表头结点和表尾结点)
LinkList ReverseLinkList( LinkList L)
{
Lnode *p, *pre, *s;
p = L -> next;
s = p -> next;
p -> next = NULL;//处理第一个结点,指针指向NULL,因为逆置后它将是尾结点
while( s != NULL) //当s为空的时候说明p已经指向链表的最后节点了
{
pre = p;
p = s;
s = s ->next;
p -> next = pre; //指针反转
}
L ->next = p; //处理最后一个结点,头结点的指针指向它
return L;
}
㈥ 数据结构中的一趟分配算法什么意思
简单说就是解决一个问题的最多步骤次数
这里 因为有三个循环
所以最多要n^3次(n*n*n)所以时间复杂度是o(n^3)
㈦ 设有一个表头指针的单链表,试设计一个算法,通过历遍一趟链表,将链表的所有的接点的链接的方向逆转。
//对链表实现转置的函数
template<class T>
void List<T>:: reverse(){
//转置函数的实现
LinkNode<T>*h=first,*p,*q;
p=h->link;
h->link=NULL;
while(p!=NULL)
{
q=p; //把q指向头结点
p=p->link;//让p指向他的下一个结点
q->link=h->link;//把h->link这个空结点连接为q的下一个结点
h->link=q; //把 q的位置用h->link来代替
}
//感觉你这程序是不是有错误