单向循环链表,判断长度时出现中断错误
/*这个程序是循环链表*/
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef int DataType;
typedef struct node{
DataType data;
struct node *next;
}CurrNode;
//链表初始化
void CurrInit(CurrNode **head)
{
if ((*head = (CurrNode*)malloc(sizeof(CurrNode))) == NULL)
{
exit(1);
}
(*head)->next = head;//构造循环链表
}
//链表长度返回
int Currlength(CurrNode *head)
{
CurrNode *per = head;
int num = 0;
while (per->next!=head)//出现中断错误?
{
num++;
per = per->next;
}
return num;
}
//链表插入
int CurrInsert(CurrNode *head, int i, DataType x)
{
CurrNode *per, *fin;
int j = -1;
if ((fin=(CurrNode*)malloc(sizeof(CurrNode)))==NULL)
{
exit(1);
}
per = head;
while(per->next!=head&&per->next->next!=head&&j<i-1)
{
per = per->next;
j++;
}
if (j!=i-1)
{
printf("插入位置错误!\n");
return 0;
}
fin->data = x;
fin->next = per->next;
per->next = fin;
return 1;
}
//链表删除
int CurrDelete(CurrNode *head, int i, DataType *x)
{
CurrNode *per, *tmp;
int j = -1;
if ((tmp = (CurrNode*)malloc(sizeof(CurrNode))) == NULL)
{
exit(1);
}
per = head;
while (per->next != head&&j<i - 1)//删除不需要判断下一个节点是否存在
{
per = per->next;
j++;
}
if (j != i - 1)
{
printf("删除位置错误!\n");
return 0;
}
*x = per->data;
tmp = per->next;
per->next = per->next->next;
free(tmp);
return 1;
}
//链表取出
int CurrGet(CurrNode *head, int i, DataType *x)
{
CurrNode *per=head;
int j = -1;
while (per->next!=head&&j != i)
{
j++;//失误
per = per->next;
}
if (j!=i)
{
printf("取出位置错误!\n");
return 0;
}
*x = per->data;
return 1;
}
//链表销毁
void CurrDestroy(CurrNode **head)
{
CurrNode *per = *head, *tmp;
if ((tmp = (CurrNode*)malloc(sizeof(CurrNode))) == NULL)
{
exit(1);
}
while (per->next != head)
{
tmp = per;
per = per->next;
free(tmp);
}
*head = NULL;
}
//主函数
int main()
{
CurrNode *mylist;
int i, x;
CurrInit(&mylist);
for ( i = 0; i < 100; i++)
{
if ((CurrInsert(mylist, i, i + 1)) == 0)
{
printf("插入位置错误!\n");
return ;
}
}
if ((CurrDelete(mylist, 5, &x)) == 0)
{
printf("删除位置错误!\n");
return;
}
else
{
printf("删除数字:%d\n", x);
}
for ( i = 0; i < Currlength(mylist); i++)
{
if ((CurrGet(mylist, i, &x)) == 0)
{
printf("取出位置错误!\n");
return;
}
else
{
printf("%d ",x);
}
}
CurrDestroy(&mylist);
getchar();
return 0;
}
整个代码如上,Currlength()函数出现中断错误,请各位老师指教。
...全文
相关推荐
STM32-串口超时判断方式接收未知长度数据
然而,当数据长度未知时,就涉及到如何在接收数据时判断数据接收完毕,以及时处理接收到的数据。本文将详细讲解STM32微控制器在串口通信中如何使用超时机制来判断接收到的数据长度。
吉林大学数据结构课设实战:带道具系统与动态障碍的智能贪吃蛇(含A*路径规划与完整可运行C++代码)
一套真实通过吉林大学数据结构课程设计的贪吃蛇项目,完全自动运行,不依赖人工操作。程序能实时生成食物,随机掉落加速、减速、护盾三类道具,并准确识别地图中预设障碍物,通过A*或BFS算法实现动态路径规划,避开障碍并高效抵达目标。底层用循环队列管理蛇身节点,链表组织游戏实体,优先队列调度道具事件,栈辅助状态回退,完整覆盖链表、栈、队列、图搜索等核心数据结构应用。资源包内含可直接编译运行的C++源码(snake.cpp、snake.h、machine.h),带详细中文注释的逻辑版源代码(源代码.txt),原始题目文
sqlldr报超出字符长度错误
### SQL*Loader 超出字符长度错误解析与解决方案#### 概述在使用SQL*Loader工具导入数据时,可能会遇到超出字符长度限制的错误。
C++ 中判断非空的错误指针
在C++编程中,当处理网络通信时,尤其是涉及数据接收和处理的部分,可能会遇到因错误的系统行为导致程序崩溃的问题。例如,当使用recv函数接收数据时,返回的长度可能异常大,如文中提到的16亿多字节,这通
JavaScript判断字符长度、数字、Email、电话等常用判断函数分享
判断字符长度(DataLength)在处理用户输入或进行数据校验时,经常需要知道字符串的实际长度。


新手乐园
