三木社区

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 396|回复: 0
打印 上一主题 下一主题

C语言数据结构-

[复制链接]

1562

主题

1564

帖子

4904

积分

博士

Rank: 8Rank: 8

积分
4904
跳转到指定楼层
楼主
发表于 2017-9-1 08:14:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. /* main2-6.c 检验bo2-6.cpp的主程序 */
  2. #include"c1.h"
  3. typedef int ElemType;
  4. #include"c2-5.h"
  5. #include"bo2-6.c"
  6. Status compare(ElemType c1,ElemType c2) /* c1等于c2 */
  7. {
  8.    if(c1==c2)
  9.      return TRUE;
  10.    else
  11.      return FALSE;
  12. }

  13. int cmp(ElemType a,ElemType b)
  14. { /* 根据a<、=或>b,分别返回-1、0或1 */
  15.    if(a==b)
  16.      return 0;
  17.    else
  18.      return (a-b)/abs(a-b);
  19. }

  20. void visit(ElemType c)
  21. {
  22.    printf("%d ",c);
  23. }

  24. void main()
  25. {
  26.    Link p,h;
  27.    LinkList L;
  28.    Status i;
  29.    int j,k;
  30.    i=InitList(&L);
  31.    if(!i) /* 初始化空的线性表L不成功 */
  32.      exit(FALSE); /* 退出程序运行 */
  33.    for(j=1;j<=2;j++)
  34.    {
  35.      MakeNode(&p,j); /* 生成由p指向、值为j的结点 */
  36.      InsFirst(&L,L.tail,p); /* 插在表尾 */
  37.    }
  38.    OrderInsert(&L,0,cmp); /* 按升序插在有序表头 */
  39.    for(j=0;j<=3;j++)
  40.    {
  41.      i=LocateElemP(L,j,&p,cmp);
  42.      if(i)
  43.        printf("链表中有值为%d的元素。\n",p->data);
  44.      else
  45.        printf("链表中没有值为%d的元素。\n",j);
  46.    }
  47.    printf("输出链表:");
  48.    ListTraverse(L,visit); /* 输出L */
  49.    for(j=1;j<=4;j++)
  50.    {
  51.      printf("删除表头结点:");
  52.      DelFirst(&L,L.head,&p); /* 删除L的首结点,并以p返回 */
  53.      if(p)
  54.        printf("%d\n",GetCurElem(p));
  55.      else
  56.        printf("表空,无法删除 p=%u\n",p);
  57.    }
  58.    printf("L中结点个数=%d L是否空 %d(1:空 0:否)\n",ListLength(L),ListEmpty(L));
  59.    MakeNode(&p,10);
  60.    p->next=NULL; /* 尾结点 */
  61.    for(j=4;j>=1;j--)
  62.    {
  63.      MakeNode(&h,j*2);
  64.      h->next=p;
  65.      p=h;
  66.    } /* h指向一串5个结点,其值依次是2 4 6 8 10 */
  67.    Append(&L,h); /* 把结点h链接在线性链表L的最后一个结点之后 */
  68.    OrderInsert(&L,12,cmp); /* 按升序插在有序表尾头 */
  69.    OrderInsert(&L,7,cmp); /* 按升序插在有序表中间 */
  70.    printf("输出链表:");
  71.    ListTraverse(L,visit); /* 输出L */
  72.    for(j=1;j<=2;j++)
  73.    {
  74.      p=LocateElem(L,j*5,compare);
  75.      if(p)
  76.        printf("L中存在值为%d的结点。\n",j*5);
  77.      else
  78.        printf("L中不存在值为%d的结点。\n",j*5);
  79.    }
  80.    for(j=1;j<=2;j++)
  81.    {
  82.      LocatePos(L,j,&p); /* p指向L的第j个结点 */
  83.      h=PriorPos(L,p); /* h指向p的前驱 */
  84.      if(h)
  85.        printf("%d的前驱是%d。\n",p->data,h->data);
  86.      else
  87.        printf("%d没前驱。\n",p->data);
  88.    }
  89.    k=ListLength(L);
  90.    for(j=k-1;j<=k;j++)
  91.    {
  92.      LocatePos(L,j,&p); /* p指向L的第j个结点 */
  93.      h=NextPos(p); /* h指向p的后继 */
  94.      if(h)
  95.        printf("%d的后继是%d。\n",p->data,h->data);
  96.      else
  97.        printf("%d没后继。\n",p->data);
  98.    }
  99.    printf("L中结点个数=%d L是否空 %d(1:空 0:否)\n",ListLength(L),ListEmpty(L));
  100.    p=GetLast(L); /* p指向最后一个结点 */
  101.    SetCurElem(p,15); /* 将最后一个结点的值变为15 */
  102.    printf("第1个元素为%d 最后1个元素为%d\n",GetCurElem(GetHead(L)->next),GetCurElem(p));
  103.    MakeNode(&h,10);
  104.    InsBefore(&L,&p,h); /* 将10插到尾结点之前,p指向新结点 */
  105.    p=p->next; /* p恢复为尾结点 */
  106.    MakeNode(&h,20);
  107.    InsAfter(&L,&p,h); /* 将20插到尾结点之后 */
  108.    k=ListLength(L);
  109.    printf("依次删除表尾结点并输出其值:");
  110.    for(j=0;j<=k;j++)
  111.    {
  112.      i=Remove(&L,&p);
  113.      if(!i) /* 删除不成功 */
  114.        printf("删除不成功 p=%u\n",p);
  115.      else
  116.        printf("%d ",p->data);
  117.    }
  118.    MakeNode(&p,29); /* 重建具有1个结点(29)的链表 */
  119.    InsFirst(&L,L.head,p);
  120.    DestroyList(&L); /* 销毁线性链表L */
  121.    printf("销毁线性链表L之后: L.head=%u L.tail=%u L.len=%d\n",L.head,L.tail,L.len);
  122. }
  123. 
复制代码


回复

使用道具 举报

Archiver|手机版|小黑屋|三木电子社区 ( 辽ICP备11000133号-4 )

辽公网安备 21021702000620号

GMT+8, 2025-5-2 00:07 , Processed in 0.025901 second(s), 23 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表