您的位置:首页 > 其它

小甲鱼双向循环链表实践---错误更正

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;}
这样就好了,虽然改的不太雅观。

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息