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

看了一集小甲鱼的数据结构,讲的双向循环链表,总感觉代码不对劲,后来去论坛看到有人也提出质疑。百度了一下,网上有源码,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           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 = 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;
}

这样就好了,虽然改的不太雅观。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
道01数据结构和算法绪论. mp402_谈谈算法. mp4 西03_时间复杂度和空间复杂度.mp404_时间复杂度和空间复杂度2.mp405_时间复杂度和空间复杂度3.mp4险06线性表. mp407_线性表2. mp408_线性表3. mp4品09_ 线性表4. mp410_线性表5. mp411_线性表6. mp4@12_线性表7. mp413_线性表8. mp4西14. 线性表9. mp415_线性表10. mp4 16_单链表小结:腾讯面试题. mp4品17_ 线性表12. mp418_约瑟夫问题. mp4西19_ 线性表14. mp4 20_魔术师发牌问题. mp421线性表16. mp4逾22_ 线性表17. mp423_栈和队列. mp424_栈和队列2. mp4面25_ 进制转换. mp4面26_ 栈和队列4. mp427_逆波兰计算器mp4 28_中缀表达式转换为后缀表达式01. mp4逾29_ 中缀表达式转换为后缀表达式02. mp430_栈和队列7. mp431_栈和队列8. mp4 西32递归和分治思想.mp433_递归和分治思想2. mp434_汉诺塔. mp4 35_八皇后问题. mp4 四36_字符串.mp4 二37_ KMP算法. mp4 四71斐波那契查找(黄金分割法查找).38_ KMP算法2. mp4 立39_ KMP算法之NEXT数组代码原理分析. mp4二40_ KMP算法之实现及优化. mp4二41树. mp4 四42_树的存储结构. mp443_树的存储结构2. mp4四44_二艾树. mp445_二叉树2. mp4 46_二又树的存数结构. mp447_二又树的遍历. mp4 48_二丈树的建立和遍历算法. mp4四49_线索二叉树. mp4 50_线索二又树代码实现. mp4 画51_树、森林及二又树的相互转换. mp452_赫夫曼树. mp453_赫夫曼编码. mp4 四54_赫夫曼编码C语言实现. mp4口55_图. mp4 逾56_图的定义与术语2. mp457_图的存储结构. mp4 58_图的存储结构(邻接表) . mp4 59_图的存储结构(十字链表、邻接多重表、边集数组) . mp4四93堆排序的代码实现mp460_图的遍历(深度优先遍历) . mp4 品94归并排序. mp4 四61_马踏棋盘算法(骑士周游问题) . mp4 95归并排序(迭代实现) . mp4品62_图的遍历(广度优先遍历) . mp4 國96快速排序.mp4 63_最小生成树(普里姆算法) . mp4 二97快速排序的优化mp464_最小生成树( 克鲁斯卡尔算法) . mp4 立98总结回顾.mp4画65_最短路径(迪杰斯特拉算法).mp466_最短路径( 弗洛伊德算法) . mp4口67拓扑排序. mp4二68关键路径.mp4口69_查找算法. mp4 画69关键路径(代码讲解).mp4
甲鱼教程合集(基础篇+工具篇+系统篇+OD使用教程) 压缩包文件列表:小甲鱼_加密解密教程基础视频 基础篇_第一讲_概述.rar 基础篇_第二讲_一些必备的常识(1).rar 基础篇_第六讲_初步认识PE格式.rar 基础篇_第三讲_一些必备的常识(2).rar 基础篇_第四讲_Windows消息机制.rar 基础篇_第五讲_Windows保护模式.rar 小甲鱼_加密解密教程之工具篇 PEInfo编程思路讲解01-工具篇-解密系列.zip PEInfo编程思路讲解02-工具篇-解密系列.zip PEInfo编程思路讲解03-工具篇-解密系列.zip PEInfo编程思路讲解04-工具篇-解密系列.zip 小甲鱼_加密解密教程之系统篇 PE结构详解1-系统篇-第一讲-解密系列.rar PE结构详解3-系统篇-第三讲-解密系列.rar PE结构详解4-系统篇-第四讲-解密系列.rar PE结构详解5-系统篇-第五讲-解密系列.rar PE结构详解6-系统篇-第六讲(1)-解密系列.rar PE结构详解6-系统篇-第六讲(2)-解密系列.rar PE结构详解7-系统篇-第七讲-解密系列.rar PE结构详解8-系统篇-第八讲-解密系列.zip PE结构详解9-系统篇-第九讲-解密系列.zip PE结构详解10-系统篇-第十讲-解密系列.zip PE结构详解11-系统篇-第十一讲(2)-解密系列.zip PE结构详解11-系统篇-第十一讲-解密系列.zip 小甲鱼_解密调试之OD使用系列教程 OD使用教程1.zip OD使用教程2.zip OD使用教程3(上).zip OD使用教程3(下).zip OD使用教程3(中).zip OD使用教程4.zip OD使用教程5.zip OD使用教程6.zip OD使用教程7(上).zip OD使用教程7(下).zip OD使用教程8(下).zip OD使用教程8.zip OD使用教程9.zip OD使用教程10.zip OD使用教程11.zip OD使用教程12.zip OD使用教程13.zip OD使用教程14.zip OD使用教程15.zip OD使用教程16.zip OD使用教程17.zip

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值