单向链表(补充)与linux虚拟机网络配置
1.linux虚拟机网络配置
6.下载相应程序:
虚拟机安装应用 sudo apt-get install + (应用名)
2.单向链表
快慢指针:
定义两个指针(pfast, pslow),让快指针(pfast)先走k步,在让慢指针与快指针一起走动,当快指针所指结点为空时,此时慢指针所指即为倒数第k个结点;
eg:
//找中间结点
Node_t *mid_TheLink(Link_t *plink)
{if(linkOfEmpy(plink) == 0){return NULL;}Node_t *p = plink->phead, *q = plink->phead ;while(p->pnext){p = p->pnext;if(p->pnext){ p = p->pnext;q = q->pnext;}}return q;
}//找倒数第k个结点
Node_t *find_k_node(Link_t *plink, int k)
{Node_t *pfast = plink->phead;Node_t *pslow = pfast;int i;for(i = 0; i < k; ++i){ if(pfast == NULL){return NULL;}pfast = pfast->pnext;}while(pfast){pfast = pfast->pnext;pslow = pslow->pnext;}return pslow;}
单向链表的插入排序法(默认为升序)
1.保存链表中的第二个结点的地址(ptmp = plink->phead->pnext);
2. 将链表从第一个结点断开(plink->phead->pnext = NULL),确保原链表为有序链表(此时原链表中仅有一个元素,因此一定有序);
3.依次将其余结点中的值先与原链表中的原链表中的元素比较,找到其合适的位置;
若头结点元素大于其(plink->phead->date > pinsert->data)则利用链表的头插,插入该结点(pinsert->pnext = plink->phead;
plink->phead = pinsert;);
否则与原链表中其余元素比较找到合适位置插入:
pinsert->pnext = p->pnext;
p->pnext = pinsert;
重复步骤3直到链表有序;
eg:
//插入排序
void sort_link(Link_t *plink)
{ if(plink->phead == NULL || plink->phead->pnext == NULL){return ;}Node_t *ptmp = plink->phead->pnext;//保存原链表的第二个结点Node_t *pinsert = NULL;plink->phead->pnext = NULL;//原链表从第二个结点前断开,使其有序while(ptmp){pinsert = ptmp;//保存当前结点,防止链表元素丢失ptmp = ptmp->pnext;//指向当前结点的下一个结点if(plink->phead->data >= pinsert->data){pinsert->pnext = plink->phead;plink->phead = pinsert;}else{//当前结点与原链表中的其余结点比较,找到合适位置Node_t *p = plink->phead;while(p->pnext != NULL && pinsert->data > p->pnext->data){p = p->pnext;}pinsert->pnext = p->pnext;p->pnext = pinsert;}}
}

