单链表的应用

来源:互联网 发布:mac items下载文件 编辑:程序博客网 时间:2024/05/21 17:07
  1. Copyright (c)2015,烟台大学计算机与控制工程学院       
  2. All rights reserved.       
  3. 文件名称:项目3--单链表应用.cpp       
  4. 作    者:刘小硕      
  5. 完成日期:2015年10月5日       
  6. 版 本 号:v1.0       
  7. */  

 

#include <stdio.h>#include <malloc.h>#include "linklist.h"void split(LinkList *&L,LinkList *&L1,LinkList *&L2){    LinkList *p=L->next,*q,*r1; //p指向第1个数据节点    L1=L;       //L1利用原来L的头节点    r1=L1;                  //r1始终指向L1的尾节点    L2=(LinkList *)malloc(sizeof(LinkList));    //创建L2的头节点    L2->next=NULL;          //置L2的指针域为NULL    while (p!=NULL)    {        r1->next=p;         //采用尾插法将*p(data值为ai)插入L1中        r1=p;        p=p->next;          //p移向下一个节点(data值为bi)        q=p->next;          //由于头插法修改p的next域,故用q保存*p的后继节点        p->next=L2->next;   //采用头插法将*p插入L2中        L2->next=p;        p=q;                //p重新指向ai+1的节点    }    r1->next=NULL;          //尾节点next置空}int main(){    LinkList *L,*L1,*L2;    int i;    ElemType a[]= {1,2,3,4,5,6,7,8,9,10};    InitList(L);    InitList(L1);    InitList(L2);    for(i=9; i>=0; i--)        ListInsert(L, 1, a[i]);    printf("L:");    DispList(L);    printf("L->L1,L2\n");    split(L,L1,L2);    printf("L1:");    DispList(L1);    printf("L2:");    DispList(L2);    DestroyList(L1);    DestroyList(L2);    return 0;}1例:删除元素最大的节点(linklist.h是单链表“算法库”中的头文件,详情单击链接…)#include <stdio.h>#include <malloc.h>#include "linklist.h"void delmaxnode(LinkList *&L){    LinkList *p=L->next,*pre=L,*maxp=p,*maxpre=pre;    while (p!=NULL) //用p扫描整个单链表,pre始终指向其前驱节点    {        if (maxp->data<p->data)  //若找到一个更大的节点        {            maxp=p; //更改maxp            maxpre=pre; //更改maxpre        }        pre=p;      //p、pre同步后移一个节点        p=p->next;    }    maxpre->next=maxp->next;    //删除*maxp节点    free(maxp);         //释放*maxp节点}int main(){    LinkList *L;    int i;    ElemType a[]= {1,3,2,9,0,4,7,6,5,8};    InitList(L);    for(i=9; i>=0; i--)        ListInsert(L, 1, a[i]);    printf("L:");    DispList(L);    printf("删除最大值节点\n");    delmaxnode(L);    printf("L:");    DispList(L);    DestroyList(L);    return 0;}1例:增序排列节点(linklist.h是单链表“算法库”中的头文件,详情单击链接…)#include <stdio.h>#include <malloc.h>#include "linklist.h"void sort(LinkList *&L){    LinkList *p,*pre,*q;    p=L->next->next;        //p指向L的第2个数据节点    L->next->next=NULL;     //构造只含一个数据节点的有序表    while (p!=NULL)    {        q=p->next;          //q保存*p节点后继节点的指针        pre=L;              //从有序表开头进行比较,pre指向插入*p的前驱节点        while (pre->next!=NULL && pre->next->data<p->data)            pre=pre->next;  //在有序表中找插入*p的前驱节点*pre        p->next=pre->next;  //将*pre之后插入*p        pre->next=p;        p=q;                //扫描原单链表余下的节点    }}int main(){    LinkList *L;    int i;    ElemType a[]= {1,3,2,9,0,4,7,6,5,8};    InitList(L);    for(i=9; i>=0; i--)        ListInsert(L, 1, a[i]);    printf("L:");    DispList(L);    printf("排序\n");    sort(L);    printf("L:");    DispList(L);    DestroyList(L);    return 0;}

0 0
原创粉丝点击