欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > DOC文档下载
     

    [计算机类论文精品]c语言数据结构双链表源代码.doc

    • 资源ID:3313137       资源大小:36KB        全文页数:7页
    • 资源格式: DOC        下载积分:4
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要4
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    [计算机类论文精品]c语言数据结构双链表源代码.doc

    c语言数据结构双链表源代码/*双链表的创建。此双链表要求为带头节点的,为了算法方便特采用了循环双链表。通过编程发现带头节点的也有其不便之处。为了保持表的一直有序性思考如下:1:表的一开始的创建就要有序。2:插入元素后要做到仍然有序。3:删除元素不会改变表的有序性4:所谓有序,即为非降序或者非升序排列。5:为了做到以上几点,考虑到链表的不易排序性质,特设置一个线性表作为输入缓存空间进行事先排序。关于排序的方法有多种,为了快速完成采用了较为简单的插入排序。copyright :yywill 帖请注明,做人要厚道*/#include <stdio.h>typedef struct LNode    int    data;    struct  LNode   *next;    struct  LNode   *prior;*Link,Position;typedef struct List_Struct /* 头节点 */    Link head,tail;    int len;    int value; /* 0表示升序/非降序排列,1表示降序/非升序排列 */LinkList,*List;/*/MakeNode(Link p,List l,int e) /* 创建节点 */    List InitList();    p->data=e;    l->tail=p;/* 此函数只设置尾节点,因为头节点只要设置一次 */*/List InitList()      /* 初始化建立双链表 */    LinkList *l;    l=(LinkList *)malloc(sizeof(LinkList);    l->len=0;    l->head=l->tail;/* 当头节点和尾节点指向同一地址时候表示为空表 */    return l;/*/CreateList(int n,List l,int *e)   /* 1.建立一个有序的带表头结点的双链表 */                                   /* n为元素个数 */int i,elem;Position *p1,*p2;Sort(n,e) ;p1=(Position *)malloc(sizeof(Position);elem=e1 ;MakeNode(p1,l,elem);/* 第一个节点 */p1->next=p1;p1->prior=p1;l->head=p1;l->len=1;    if(n=0)return;/* 如果链表只有一个项则不用执行下面的函数,直接退出 */        for(i=2;i<=n;i+)        p2=(Position *)malloc(sizeof(Position);        elem=ei;        MakeNode(p2,l,elem);        (l->len)+;/* 表长度计数,每循环一次加一 */        p1->next=p2;p2->next=l->head;        l->head->prior=p2;p2->prior=p1;p1=p2;        l->value=1;/* 默认为非升序创建 */*/ListTraverse(List l)  /* 遍历链表 */int i=0;Link p;p=l->head;printf("(");    for(;i<l->len;i+)    printf("%d,",p->data);    p=p->next  ;    printf(")");/*/ConListTraverse(List l) /* 反向遍历链表 */int i=0;Link p;p=l->tail;printf("(");    for(;i<l->len;i+)    printf("%d,",p->data);    p=p->prior  ;    printf(")");/*/Reverse(List l)  /* 5.逆置该双链表 */int i=0;Link p1,p2;List l1,l2;p1=l->head;l1=l;p2=l1->head;l1->head=l1->tail;l1->tail=p2;    for(;i<l->len;i+)    p2=p1->next;    p1->next=p1->prior;    p1->prior=p2;    p1=p1->prior;    if(l->value=1)l->value=0;    else l->value=1;/*/LocateElem(int i,List l) /* 3.按位置号查找该双链表 */int j,n;Link p;n=l->len;if(i>n&&n<1) printf("nerror!it is not exist!");return ;if(i<(n/2)    p=l->head ;        for(j=0;j<n-1;j+)        p=p->next;             printf("nthe elem_value is:%d",p->data);        else        p=l->tail ;            for(;i<n;n-)            p=p->prior;                     printf("nthe elem_value is:%d",p->data);        /*/int GetCurElem(int n,List l) /*  4.按结点值查找该双链表 */                                /* 如查找成功则返回所在位置,如找不到则返回0 */Link p;int i;p=l->head;    for(i=0;i<l->len;i+)    if(p->data=n)return i+1;    p=p->next;    return 0;/*/int InsBefore(Position *p,int e,List l) /* 6.向前插入一个元素 */                                   /* 1<=n<=表长+1 */Position *s; int i;s=(Position *)malloc(sizeof(Position);s->data=e ;s->prior=p->prior;p->prior->next=s;s->next=p;p->prior=s;l->len=(l->len+1);return 1;/*/int Ins(int e,List l)             /*    6.插入一个元素 ,使表仍然保持有序 */Link p,p1,p2;int i;if(l->value=1)/* 降序 */    p=l->head; /* 从头部开始搜寻 */        for(i=1;i<l->len;i+)        p=p->next;        if(p->data<=e&&e<=l->head->data)InsBefore(p,e,l);return 1;          /* e比当前元素大且比头元素(即最大的元素)小 */        else if(l->value=0)/* 升序 */    p=l->tail; /* 从尾处开始搜寻 */        for(i=1;i<l->len;i+)        p=p->prior;        if(p->data<=e&&e<=l->tail->data)InsBefore(p->next,e,l);return 1;        /* e比当前元素大且比尾元素(即最大的元素)小 */    InsTail(e,l);return 1;                    /* 当上述条件都不满足的时候可以认为,该元素该插入到头节点 */                       /* 或者尾节点,这是两种特殊的情况。 */*/InsTail(int e,List l)                    /* 为了简单算法,全部插入到尾节点,头节电的通过导致连标, */                       /* 换算成尾节点的情况计算 */                         /* 全部插尾巴 */Link p1,p2;p1=l->tail;if(l->tail->data)<=e&&(l->head->data)<=e)        if(l->value=1) Reverse(l)  ;   /* 降 */        p2=(Position *)malloc(sizeof(Position);        p1=l->tail;        MakeNode(p2,l,e);        (l->len)+;/* 表长度计数,每循环一次加一 */        p1->next=p2;p2->next=l->head;        l->head->prior=p2;p2->prior=p1;        else if(l->tail->data>=e&&l->head->data>=e)        if(l->value=0)Reverse(l);        p2=(Position *)malloc(sizeof(Position);        p1=l->tail;        MakeNode(p2,l,e);        p1->next=p2;p2->next=l->head;        l->head->prior=p2;p2->prior=p1;        /*/int Remove(int i,List l)    /*  7.删除指定位置号结点 */                            /* i的合法长度为 1<=n<=表长 */                            /* 当返回值为零的时候表示通不过合法性审查 */int n,j=1;Link p;p=l->head;n=l->len;if(i<1&&i>n)printf("now!");return 0;    for(;j<i;j+)    p=p->next;    p->prior->next=p->next;p->next->prior=p->prior;l->len=(l->len-1);if(i=l->len)l->tail=p->prior;if(i=1)l->head=p->next;free(p);return 1;/*/Sort(int n,int *elem)        /* 为了保持表的有序,将输入保存在线性表中 */                            /* 先用插入排序法排序好后再创建双链表 */ int i,j;  for(i=2;i<=n;+i)  if(elemi>elemi-1)  elem0=elemi                              ;   elemi=elemi-1                            ;   for(j=i-2;elem0>elemj;-j)   elemj+1=elemj                            ; /* 记录后移 */   elemj+1=elem0                            ;   /*/int RemoveCur(int e,List l)       /* 删除某个值的元素,如果该元素不存在则返回0 */                                  /*  否则返回1,成功 */int i;i=GetCurElem(e,l);if(i=0) return 0;i=Remove(i,l);if(i=0) return 0;else return 1;/*/main()Link p;List l;int e999,i=1,n,elem,j;char c,NO;l=InitList();printf("nplease input the elems of the List:");    for(;)    printf("n please input the elems:");    while(scanf("%d",&ei+)!=1)        fflush(stdin);        i-;        printf("nplease input integer:");        /* 防止用户误操作,清除键盘缓冲区,重置输入条件。 */    printf("n any more?:y/n");        for(;)        scanf("%c",&c);            if(c='y')break;                else if(c='n')break;                    else c='y'continue;                if(c='n')break;    ; /* 此处输入创建列表 */i=i-1;CreateList(i,l,e);printf("nplease select by NO:");for(j=0;j+)if(j%2=1)printf("n2.ListTraverse");printf("n3.ConListTraverse");printf("n4.insert");printf("n5.LocateElem");printf("n6.GetCurElem");printf("n7.RemoveNO");printf("n8.RemoveCurElem");printf("n9.Reverse");printf("n0.Exit");scanf("%c",&NO);    switch(NO)    break;    case '2':ListTraverse(l);break;    case '3':ConListTraverse(l);break;    case '4':printf("ninput:");scanf("%d",&elem);Ins(elem,l);break;    case '5':printf("ninput:");scanf("%d",&elem);LocateElem(elem,l);break;    case '6':printf("ninput:");scanf("%d",&elem);n=GetCurElem(elem,l);        if(n=0)printf("nit is not exist!");break;            else printf("n the NO is:%d",n);break;     case '7':printf("ninput:");scanf("%d",&elem);n=Remove(elem,l);        if(n=0)printf("nit is not exist!");break;            else break;    case '8':printf("ninput:");scanf("%d",&elem);n=RemoveCur(elem,l);        if(n=0)printf("nit is not exist!");break;            else break;    case '9':Reverse(l);break;    case '0':exit();    default :;   

    注意事项

    本文([计算机类论文精品]c语言数据结构双链表源代码.doc)为本站会员(李主任)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开