您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 人事档案/员工关系 > 数据结构实验一 -单链表的就地反转
1/5《数据结构》实验一报告学号:机器号姓名:日期:程序名:数据结构与算法实验内容:(一)单链表的就地反转一、目的和要求(需求分析):1、掌握数据的链式存储结构以及链表的建立和操作。2、利用链表的原空间进行链表的反转;(设计一个将输入数据建立成链表、并依次输出链表数据、利用原空间把链表反转的程序。)二、程序设计的基本思想,原理和算法描述:(包括程序的结构,数据结构,输入/输出设计,符号名说明等)(1)创建带头结点的链表L。先输入总结点数num,接着输入结点。(2)打印链表L。(3)链表L进行就地反转。运用头插法(4)打印反转后的链表L。三、调试和运行程序过程中产生的问题及采取的措施:(1)给LEN赋值时,先用了“#defineLENsizeof(structLNode);”,出现编译错误“errorC2143:syntaxerror:missing')'before';'”(C2143:p=(LNode*)malloc(LEN);)。不明白怎么修改,最后用“constintLEN=sizeof(structLNode);”替代。(2)写反转函数的时候,在while循环里,运行“q=p;q-next=head-next;”之后,p-next=NULL。最后,用新的结构体指针r指向要插入的结点p之后的结点解决问题。(3)解决问题(2)后,程序运行到反转最后的结点是出现错误,后来反省发现反转函数2/5这需要创建链表最后一个结点需要指向空节点,最后在创建函数结尾加上了。四、源程序及注释:#includestdio.h#includemalloc.h#includestdlib.hstructLNode{intdata;structLNode*next;};typedefstructLNodeLNode;constintLEN=sizeof(structLNode);//给LEN赋值为sizeof(structLNode)//创建带头结点的链表LvoidCreate_L(LNode*head,intnum){LNode*p,*tmp;intdata;printf(Pleaseinputthenode:\n);p=(LNode*)malloc(LEN);if(!p-data)exit(-1);//判断指针p分配空间是否成功scanf(%d,&data);head-next=p;3/5p-data=data;p-next=NULL;while(--num){scanf(%d,&data);tmp=(LNode*)malloc(LEN);if(!tmp-data)exit(-1);tmp-data=data;tmp-next=NULL;p-next=tmp;//当前的next指向新增的结点p=p-next;//当前的指针指向next作为新的结点tmp=NULL;}p=tmp;}//输出链表LvoidPrint_L(LNode*head){LNode*p;p=head-next;while(p-next){printf(%d-,p-data);p=p-next;}printf(%d\n,p-data);4/5}//用头插法实现带头结点的链表L就地反转voidReversal_L(LNode*head){LNode*p,*q,*r;r=p=head-next;//p表示要插进新链表的结点head-next=NULL;while(p){r=r-next;q=p;//插在头结点后的结点q-next=head-next;head-next=q;p=r;//p指向下一个要插进去的结点}}intmain(){intnum;LNode*L;L=(LNode*)malloc(LEN);if(!L-data)exit(-1);printf(Pleaseinputthenumberofnodeyouwant:\n);scanf(%d,&num);//num代表想输入的结点数Create_L(L,num);//创建带头结点的链表L5/5printf(\nThelinklisttobereversedis:\n);Print_L(L);//打印原链表Reversal_L(L);//链表的就地反转printf(\nThereversallinklistis:\n);Print_L(L);//打印反转后的链表return0;}五、运行输出结果:六、心得与体会:对于第三大点的(1)中的“#defineLENsizeof(structLNode);”为何出错一直弄不明白。我发现学习这门课一定要多上机写程序,不管你在书上看的有多明白,在纸上程序写的有多完善,但是一上机运行就会发现很多的问题,发现自己存在很多不足,很多没想到的地方,这时候就需要不断的完善程序、知识和自我。
本文标题:数据结构实验一 -单链表的就地反转
链接地址:https://www.777doc.com/doc-4308644 .html