小甲鱼双向循环链表实践---错误更正
2017-04-07 16:44
585 查看
看了一集小甲鱼的数据结构,讲的双向循环链表,总感觉代码不对劲,后来去论坛看到有人也提出质疑。百度了一下,网上有源码,copy完一运行,果断不对啊,不管输入正负,输出结果都是正数的预期输出结果,也就是输入3和-3是一样的。错误的源码如下
#include <iostream> #define OK 1 #define ERROR 0 typedef char ElemType; typedef int Status; typedef struct DualNode { ElemType data; DualNode *prior; DualNode *next; } DualNode, *DuLinkList; Status InitList(DuLinkList *L) { DualNode *p, *q; *L = new DualNode; p = *L; if(*L == NULL) return ERROR; (*L)->next = (*L)->prior = NULL; for(int i = 'A'; i <= 'Z'; i++) { q = new DualNode; if(q == NULL) return ERROR; q->data = i; p->next = q; q->prior = q; p = q; } p->next = (*L)->next; (*L)->next->prior = p; return OK; } void Caesar(DuLinkList *L, int i) { if( i > 0) { do { *L = (*L)->next; }while( --i ); } else if( i < 0 ) { do { (*L) = (*L)->next; }while( ++i ); } } int main () { DuLinkList L; int i, n; InitList(&L); std::cout<< "请输入一个整数 :\n"; std::cin>> n; Caesar(&L, n); for(i = 0; i < 26; i++) { L = L->next; std::cout<< L->data<< " "; } return 0; }
what the F!怎么只能在代码里写,跳不出去了,自己太菜了,还没学会怎么写博客,就这样写吧。
然后我发现是在初始化时候出现的错误,没有进行每个节点的prior的设置。而且Caesar()函数中也有错。改正后如下:
#include <iostream>#define OK 1#define ERROR 0typedef char ElemType;typedef int Status;typedef struct DualNode{ElemType data;DualNode *prior;DualNode *next;} DualNode, *DuLinkList;Status InitList(DuLinkList *L){DualNode *p, *q;*L = new DualNode;p = *L;if (*L == NULL)return ERROR;(*L)->next = (*L)->prior = NULL;for (int i = 'A'; i <= 'Z'; i++){q = new DualNode;if (q == NULL)return ERROR;q->data = i;p->next = q;q->prior = p;p = q;}p->next = (*L)->next;(*L)->next->prior = p;return OK;}void Caesar(DuLinkList *L, int i){if (i > 0){do{*L = (*L)->next;} while (--i);}else if (i < 0){i -= 1;(*L)->prior = (*L)->next->prior;do{(*L) = (*L)->prior;} while (++i);}}int main(){DuLinkList L;int i, n;InitList(&L);std::cout << "请输入一个整数 :\n";std::cin >> n;Caesar(&L, n);for (i = 0; i < 26; i++){L = L->next;std::cout << L->data << " ";}return 0;}这样就好了,虽然改的不太雅观。
相关文章推荐
- 小甲鱼 双向循环链表实践
- 双向循环链表实践
- 双向循环链表实践---学生管理系统
- 数据结构--双向循环链表实践
- 内置迭代器的双向循环链表
- 双向循环链表
- 双向循环链表的c++模板类
- 双向循环链表建立
- 循环链表与双向链表
- 双向循环链表的实现
- 双向循环链表的删除
- 双向循环链表的基本操作
- 详解Linux内核之双向循环链表
- C实现循环链表及双向链表
- 修改自linux内核的双向循环链表通用算法
- 双向循环链表删除算法的C++程序实现
- 双向非循环递增链表——插入,删除,清空
- Linux内核2.6.14源码分析-双向循环链表代码分析
- Linux内核2.6.14源码分析-双向循环链表代码分析
- 一个简单的双向循环链表的实现