Tag: 数据结构

C语言中的AVL树

我目前正在做一个需要使用AVL树的项目,我为avl编写的插入函数似乎不起作用,它最多可用于3或4个节点; 我真的很感谢你的帮助尝试如下 Tree insert(Tree t,char name[80],int num) { if(t==NULL) { t = (Tree)malloc(sizeof(struct node)); if(t! = NULL) { strcpy(t->name,name); t->num = num; t->left = NULL; t->right = NULL; t->height = 0; } } else if(strcmp(name,t->name)left = insert(t->left,name,num); if((height(t->left)-height(t->right))==2) if(strcmp(name,t->left->name)name)>0) { t->right = insert(t->right,name,num); if((height(t->right)-height(t->left))==2) if(strcmp(name,t->right->name)>0) t = s_rotate_right(t); else t = d_rotate_right(t); } t->height = […]

使用DFS查找迷宫中的所有路径

给定迷宫中的源和目标单元格,我想使用DFS找到迷宫的所有可能解决方案。 0表示我迷宫中的墙。 可视化迷宫 我已经成功编写了一个程序,但这只给了我一条路。 我已经想到了将它扩展到所有路径的所有可能性,但遗憾的是,即使经过数小时(确切地说是2天),我也无法找到解决方案。 我想为每个节点保留一个“访问过的”数组,这样当我回溯时,我不会对前一个节点执行相同的移动。 但是,这样做只会产生一个完全不同的路径(如果有的话),没有相同的节点。 我还想到了一些其他的方式,但即使这也提出了一些问题。 我也检查了类似的问题,但没有一个是针对我的背景。 有一个使用显式递归的解决方案。 但是,我想要的是使用堆栈并找到所有可能的路径。 可悲的是,我找不到任何可信的东西(至少以我能理解的方式)。 这是我的一条路径的代码。 编辑 :我现在已经实现了“正确的”DFS。 我还添加了一个堆栈来跟踪当前路径。 然后程序还会检查未探测的节点。 但是,它检查其他一些顺序,因此我仍然只能获得一条路径! #include #include #include typedef struct Point { int x,y; }Point; typedef struct stack { struct Point pt; struct stack* next; void push(int, int); Point pop(); }stack, stack_path; stack*front =NULL; stack_path*front_path =NULL; void push(int x, int y) { […]

C中的Cons Cell数据结构

在构建一个小型Scheme解释器的早期阶段,我是C的新手。 对于项目的这一部分,我正在尝试构建一个简单的cons单元数据结构。 它应该采取像这样的列表 (abc) 并在内部表示如下: [ ][ ] -> [ ][ ] -> [ ][/] | | | ABC 为了测试它是否正常工作,我有一个打印function来回显输入。 这是不起作用的代码: #include #include #include #include “lexer.h” #include “parse.h” char token[20]; struct conscell { char *data; struct conscell *first, *rest; }; void S_Expression () { /* function from lexer to receive input a split into tokens […]

区分数据类型和数据结构

好吧,不管怎样,即使在阅读了很多教科书(真的很多)之后,在互联网上待了很长时间,我仍然无法完全理解这两件事之间的区别是什么。 为了简化问题,根据维基百科说的数据类型是: 标识确定该类型的可能值的各种类型数据之一的分类,例如实数,整数或布尔值; 可以对该类型的值执行的操作; 数据的含义; 以及可以存储该类型的值的方式。 它主要是一些抽象数据类型的实现,如实数或整数。 一切顺利,然后是数据结构: 是一种在计算机中组织数据的特殊方式,可以有效地使用它。[1] [2] 数据结构可以实现一个或多个特定的抽象数据类型,这是指定操作合同及其复杂性的手段。 相比之下, 数据结构是ADT提供的合同的具体实现 。 因此,数据结构是ADT的实现,比如堆栈或队列。 但这不会使它成为一种数据类型吗? 我能真正看到的是,数据类型的范围可以从没有任何结构组织的非常简单的事物到复杂的数据结构,真正重要的是它们是ADT的实现,反映了它的重要方面,并且可以设想它们作为单个实体(如列表或树),但数据结构必须包含至少某种逻辑或数学组织才能归类为数据结构,但遗憾的是,这种差异会使许多实体同时成为数据结构和数据类型。 那么简单的普通(数据类型)和(数据结构)之间的区别是什么? 我很乐意接受一个答案,指出一个关于这个主题的特定书籍,这个书足以解释所有这些问题,如果有人可以推荐我一些关于C语言数据结构的好书。

什么是C的质量图库?

我正在写一些C,我需要将一个非常大的图存储为邻接矩阵。 我打算破解一个快速的图形实现,但是想先问一下人们喜欢的C(不是c ++)是否有任何好的图形库。 我将以某种标准格式导入图形(可能是GML,但这不是成败要求),将其存储为邻接矩阵,然后进行一些计算。 有什么想法吗? 谢谢! 编辑:作为一个FYI,我根本没兴趣绘制图表

如何在函数内使指针(到结构)为空

一个class轮问题: 有人可以解释为什么thisNode=NULL在函数中不起作用以及如何以其他方式实现相同的结果。 介绍: 在我开始研究数据结构时,我最近开始使用指针构建了很多。 历史: 我编写了堆栈,队列,二叉搜索树和表达式树,并将很快开始编写avl树。 作为一名学生,我仍然没有意识到许多概念,并希望得到任何帮助。 方法: 我总是找到其他方法来实现我所需的结果(使头节点归零),比如在main函数中将其置零,或者最终不将它归零并将其保持为具有空数据的头/根节点,然后添加其他(有用的)节点。 (仅用作头部或指向结构的指针) 混乱: 我不明白为什么在函数中对指向struct的指针归零不起作用,但是更改结构数据成员的值之类的其他事情也没有问题。 例如: thisNode->nextNode->data = thisNode->data; *//this does works* thisNode = NULL; *//this doesn’t work* 图片: 题: 有人可以解释为什么thisNode=NULL在函数中不起作用以及如何以其他方式实现相同的结果。 问题领域: void stackPop(stackNode *headNode){ if (headNode!=NULL){ if (headNode->nextNode!=NULL){ stackNode *tempNode = getLatestStackNode(headNode); tempNode->prevNode->nextNode=NULL; tempNode->prevNode==NULL; tempNode->data==’.’; tempNode=NULL; free(tempNode); }else if (headNode->nextNode==NULL){ headNode->data=’\0′; headNode = NULL; free(headNode); } }else{ […]

如何在C中随机混洗链表

我有一个链表,我想实现一个function: Random_Shuffle_List (struct node **Headptr) – 输出一个列表,使每个节点从其原始位置随机移动。 请帮我一个有效的算法来实现这一目标。

将.csv文件读入C LinkedList

我有以下struct : struct NODE { char username[50]; char password[50]; char usertype[50]; struct NODE *next; } *head=NULL; 我想从.csv文件中读取,比如username, password, usertypeforms的username, password, usertype ,使用strtok将每一行标记为标记,并将每个标记放在右边的字段中。 例如,我的文件看起来像这样: johnnydepp, pirate123, user tonystark, iron456, sysop 我继续阅读C LinkedList ,但我无法弄明白。 任何帮助都会非常感激,或者有关如何在C中实现LinkedList任何好的参考。 我的主要问题是将元素放在每个节点中。 我知道如何使用strtok来标记文件中的一行。 这是我到目前为止所做的: void createList() { FILE *data; data = fileopen(“password.csv”, “r”); char parsedLine[50]; while (fgets(parsedLine, 50, data) != NULL) { char […]

在c中编写并行快速排序

我需要使用pthreads在c中编写并行快速排序。 这就是我到目前为止所做的。 #include #include #include #include #include // sleep() #include #include // EXIT_SUCCESS #include // strerror() #include #define SIZE_OF_DATASET 6 void* quickSort( void* data); int partition( int* a, int, int); struct info { int start_index; int* data_set; int end_index; }; int main(int argc, char **argv) { int a[] = { 7, 12, 1, -2,8,2}; pthread_t […]

什么是可以在非排序数组上完成的最快搜索?

如何在非排序数组中快速搜索? 除了线性搜索之外,我无法想到任何其他搜索机制。 任何指针都会有所帮助。