Tag: linked list

使用c中的链表制作strcpy函数

我使用链表创建自己的strcpy函数但无法完成。 没有使用链表,它可能是这样的 char* cp2014strcpy(char * dest_ptr, const char * src_ptr) { char* strresult = dest_ptr; if((NULL != dest_ptr) && (NULL != src_ptr)) { while (NULL != src_ptr) { *dest_ptr++ = *src_ptr++; } *dest_ptr = NULL; } return strresult; } 但我无法得到如何使用链表制作strcpy。

C调用链表内容的函数

我正在使用GLib来管理链表。 我正在声明2个结构并将它们放在一个链表中,如下所示。 Asteroid asteroid = {0,0,50,50,50} Asteroid asteroids = {0,0,200,200,50}; GList *asteroidList = NULL; asteroidList = g_list_append(asteroidList, &asteroid); asteroidList = g_list_append(asteroidList, &asteroids); 然后我使用以下函数遍历列表和calla函数,将结构绘制为屏幕,如下所示 void drawAsteroids(){ GList *list = asteroidList; while(list != NULL){ printf(“Asteroids”); GList *next = list->next; drawAsteroid(list->data); list = next; } } 绘图function是 void drawAsteroid(void *asteroid){ Asteroid *newAsteroid = (Asteroid *)asteroid; printf(“%d\n”, newAsteroid->xPos); circleRGBA(renderer, […]

将项目转换为C中链接列表的末尾

编辑*(晚上8:14) – 抱歉,我更正了我的代码并将其作为一种方法,因此可以更容易理解。 在添加到链表的末尾时,我不确定如何正确地转换结构。 编译此代码会在最后一行给出一个强制警告。 这可能是我的其余代码无法正常运行的原因。 例如: #include typedef struct { int data; struct node *next; } node; node *HEAD = NULL; node *addNode(int num) { if (HEAD == NULL) { HEAD = (node *)malloc(sizeof(node)); HEAD->next = NULL; HEAD->data = num; } else { node *newNode; newNode = (node *)malloc(sizeof(node)); newNode->data = num; newNode->next = […]

将数字插入已排序的链接列表,为什么数字每次都插入第二个位置?

我正在开发一个关于链表的项目,我无法将数字插入到已排序的链表中。 每次插入第二个位置的数字,我无法弄清楚问题出在哪里。这是我的代码: void insertSort(struct linkedList *n,int num,int *length){ //insert number to a sort linked list node *new = (node *) malloc(sizeof(node)); //create a new node new->next=NULL; new->data = num; while(n!=NULL&&n->data > new->data){ // find which position num should insert in sorted list n = n->next; } new->next = n->next; n->next= new; length += 1; } […]

按字母顺序对链表进行排序

我想问你,如果可以简单地按字母顺序对名字进行排序? 我认为这是可能的,但我不知道如何。 你能帮帮我吗? 我将非常感激。 “我”按下应该扫描新名称并将此名称添加到链表,然后按字母顺序对此列表进行排序“d”按下应显示整个排序列表 “k”按下程序结束 我用结构数组做了这个,它工作得很好,但我不知道如何对链表做同样的事情…… 非常感谢你 :) 这是代码: #include #include #include typedef struct list{ char name[100]; struct list *next; }LIST; int main() { int i, n, k = 0, v = 0, m = 0, j = 0; char str[100], c; LIST *p_first = NULL, *p_act = NULL, *p_prev = NULL; while((c=getchar())!=’k’) { […]

在Struct内部的指向Struct的Free()指针

我似乎无法找到如何free()子结构。 结构: typedef struct { char ID[5]; location *loc; } observer; typedef struct { double lat; double lng; } location; 我的Free()Wrapper是: void free_obs_list_node(void *data) { free(*(observer **)data); } 我可以释放观察者结构。 我无法释放指向结构位置的指针。 这是我的问题:如何释放location *loc;指向的location结构location *loc; 我使用了free()的包装器,因为这些是通用链表中的节点。

检查c中的链表中是否已存在元素

假设我有一个存储book结构和下一个节点指针的链表: struct book { unsigned short size_of_content; unsigned short price; unsigned char *content; }; struct list { struct book p; struct list *next; }; 当我构建链表时,我会检查新书的价格是否与其中一本已链接的书的价格相同。 基本上确保没有重复的价格。 我有一个构建价格数组的想法,并将新价格与现有价格进行比较。 但是,由于C不支持无限大小的数组,我不认为我的方式是个好主意。 我该怎么办? 谢谢

删除头function中的内存泄漏

嘿大家我在删除头function中出现内存泄漏。 我想可能是因为我没有释放头部,但我似乎无法找到正确的位置。 我正在思考L-> head = L-> head-> next; data_t * removehead(list_t *L) { data_t *temp = NULL; } if (L->head != NULL) { temp = L->head->data_ptr; L->head = L->head->next; L->size–; } return temp; } 有什么想法吗?

Scanf始终跳过第二行输入

我正在尝试读取文本数据行,并将它们存储在链表中。 输入数据看起来像这样: David Copperfield Charles Dickens 4250 24.95 32.95 10 6 END_DATA 我读取数据的方法是首先读取第一行,看它是否是END_DATA。 如果不是,那么我将第一行传递给一个函数,该函数创建一个带有书籍数据的链表Node。 由于某种原因,在我将第一行传递给函数后,scanf不会读取第二行。 当我尝试在读取数据后打印节点时,我的输出看起来像这样。 David Copperfield 0 0.000000 0.000000 0 0 Charles Dickens 4250 24.950001 32.950001 10 6 Charles Dickens 0 0.000000 0.000000 0 0 源代码如下 #include “lab3p1.h” #include #include #include struct NodeRec { Book data; struct NodeRec *next; }; typedef struct NodeRec […]

从文件中读取单词到简单的链表

我需要编写一个程序来读取文件,然后将这些单词保存到链表中以供进一步使用。 我决定使用fgetc逐个字符地读取文本,然后每次检测到换行符( ‘\n’ )或空格( ‘ ‘ )时将全部保存到列表中,表示一个单词。 对不起,我是文件指针的新手,这是我到目前为止所得到的: struct list { //global char string[30]; struct list *next; }; int main(void) { FILE *filePtr; char file[] = “text.txt”; char tempStr[30]; list *curr, *header; char c; int i = 0; curr = NULL; header = NULL; if((filePtr = fopen(file, “r”)) == NULL) { printf(“\nError opening file!”); getchar(); […]