数据结构算法请教?(100)

  • 主题发起人 主题发起人 坐井看天阔
  • 开始时间 开始时间

坐井看天阔

Unregistered / Unconfirmed
GUEST, unregistred user!
试编写一个算法,对一个带头结点单链表反复找出表中最小元素,并在输出该元素后删除它,直到表为空时结束。typedef struct Lnode{ int data;
struct Lnode * next;}Lnode,*LinkList;---------------------请指教,谢谢!
 
// header: 链表的头节点// return: 移除最小节点后,链表的头节点Lnode * find_and_remove(Lnode * header){ if( !header ) return 0; Lnode * p1= header, *p2= header->next; Lnode * p= p1, // p 指向最小的节点 Lnode * prior= 0; // prior指向p的前驱 while(p2) { if(p2->data < p->data) { p= p2; prior= p1; } p1= p2; p2= p2->next; } // 输出最小值 std::count << p->data; // 若header是最小的,返回header的下一个 // 否则,从链表中移除p,返回原先的头节点 if(!prior) { header= p->next; return p->next; } else
{ prior->next= p->next; } // 移除后若需要删除: delete p; return header;}void main(){ Lnode * header; 初始化链表(header)... // 不断循环,直到header==0 while( (header=find_and_remove(header)) ); ... }
 
接受答案了.
 
谢谢您!
 
后退
顶部