免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1843 | 回复: 4
打印 上一主题 下一主题

链表的实现 求帮忙修改 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-05-19 23:34 |只看该作者 |倒序浏览
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define ERROR 0
  4. #define OK 0
  5. typedef int Elemtype;
  6. typedef int status;
  7. typedef struct LNode
  8. {
  9.         Elemtype date;
  10.         struct LNode *next;
  11.         int length;
  12.         int listsize;

  13. }LNode,*LinkList;

  14. //建立链表
  15. void CreateList(LinkList &L)
  16. {
  17.         LinkList p;
  18.         int a,n;
  19.         printf("请输入要建立链表的长度\n");
  20.         scanf("%d",&n);
  21.         L=(LinkList)malloc(sizeof(LNode));
  22.         L->next=NULL;
  23.         printf("请输入链表的各元素,以空格键分开\n");
  24.         for(a=n;a>0;--a)
  25.         {
  26.                 p=(LinkList)malloc(sizeof(LNode));
  27.                 scanf("%d",&p->date);
  28.                 p->next=L->next;
  29.                 L->next=p;
  30.         }
  31. }
  32. //输出链表
  33. void PrintList(LinkList L)
  34. { LinkList p;
  35. p=L->next;
  36. while(p)
  37. {printf("%d ",p->date);
  38. p=p->next;
  39.         }
  40. }
  41. //在i位置插入元素e
  42. status ListInsert(LinkList &L,int a,Elemtype e)
  43. {
  44.         LinkList p,s;
  45.         int j;
  46.         p=L;
  47.         j=0;
  48.         while(p&&j<a-1)
  49.         {
  50.                 p=p->next;
  51.                 ++j;
  52.         }
  53.         if(!p||j>a-1)
  54.                 return ERROR;
  55.         s=(LinkList)malloc(sizeof(LNode));
  56.         s->date=e;
  57.         s->next=p->next;
  58.         p->next=s;
  59.         return OK;
  60. }
  61. //删除第i个元素
  62. status ListDelete(LinkList &L,int a,Elemtype &e)
  63. {
  64.         LinkList p,q;
  65.         int j;
  66.         p=L;
  67.         j=0;
  68.         while(p->next&&j<a-1)
  69.         {
  70.                 p=p->next;
  71.                 ++j;
  72.         }
  73.         if(!(p->next)||j>a-1)
  74.                 return ERROR;
  75.         q=p->next;
  76.         p->next=q->next;
  77.         e=q->date;
  78.         free(q);
  79.         return OK;
  80. }
  81. //合并La和Lb两个有序表
  82. void MergeList_L(LinkList &La,LinkList &Lb,LinkList &Lc)
  83. {
  84.         LinkList pa,pb,pc;
  85.         pa=La->next;
  86.         pb=Lb->next;
  87.         pc=La;
  88.         Lc=pc;
  89.         while (pa&&pb)
  90.         {
  91.                 if (pa->date<=pb->date)
  92.                 {
  93.                         pc->next=pa;
  94.                         pc=pa;
  95.                         pa=pa->next;
  96.                 }
  97.                 else
  98.                 {
  99.                         pc->next=pb;
  100.                         pc=pb;
  101.                         pb=pb->next;
  102.                 }
  103.         }
  104.         pc->next=pa?pa:pb;
  105.         free(Lb);
  106. }
  107. //主函数
  108. void main()
  109. {
  110.         LinkList L;
  111.         Elemtype e;
  112.         int i,a,flag;
  113.         CreateList(L);
  114.         PrintList(L);
  115.   while(flag)
  116.         {
  117.                 printf("\n请选择操作:1 插入元素  2 删除元素 3 合并两个有序表  4 结束\n");
  118.         scanf("%d",&a);
  119.         if(a==1){
  120.             printf("请输入要插入元素的位置:");
  121.             scanf("%d",&i);
  122.                 printf("请输入要插入的元素:");
  123.              scanf("%d",&e);
  124.             ListInsert(L,i,e);
  125.             PrintList(L);
  126.         }  
  127.         else if(a==2){
  128.             printf("请输入要删除元素的位置:");
  129.             scanf("%d",&i);
  130.             ListDelete(L,i,e);
  131.             PrintList(L);
  132.         }
  133.         else if(a==3){
  134.         LinkList La,Lb,Lc;
  135.             printf("\n首先建立一个有序链表La\n(采用逆位序法建立,按从大到小输入各元素)\n");
  136.             CreateList(La);
  137.              printf("La链表为\n");
  138.             PrintList(La);
  139.             printf("\n然后建立一个有序链表Lb\n(采用逆位序法建立,按从大到小输入各元素)\n");
  140.             CreateList(Lb);
  141.             printf("Lb链表为\n");
  142.             PrintList(Lb);
  143.             printf("\n合并后的Lc链表为\n");
  144.             MergeList_L(La,Lb,Lc);
  145.             PrintList(Lc);
  146.         }
  147.         else if(a==4){
  148.                     PrintList(L);
  149.                         break;
  150.         }
  151.     else{
  152.             flag=0;
  153.                 printf("请输入小于4的数\n");
  154.         }
  155.         }
  156.   exit(0);       
  157. }
复制代码
编译出现如下错误
root@ubuntu:~# gcc test6.c -o test6
test6.c:17:26: error: expected ‘;’, ‘,’ or ‘)’ before ‘&’ token
test6.c:44:28: error: expected ‘;’, ‘,’ or ‘)’ before ‘&’ token
test6.c:64:28: error: expected ‘;’, ‘,’ or ‘)’ before ‘&’ token
test6.c:84:27: error: expected ‘;’, ‘,’ or ‘)’ before ‘&’ token

不能用& ??
求教具体怎么改 谢

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
2 [报告]
发表于 2012-05-20 07:17 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
3 [报告]
发表于 2012-05-20 09:10 |只看该作者
本帖最后由 lsnl8480 于 2012-05-20 16:11 编辑

程序改错了,就不献丑了,删除了。

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
4 [报告]
发表于 2012-05-20 09:20 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
5 [报告]
发表于 2012-05-20 11:05 |只看该作者
pmerofc 发表于 2012-05-20 09:20
回复 3# lsnl8480

还真是诶,刚才改的时候没注意。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP