字符双向链表

Posted

技术标签:

【中文标题】字符双向链表【英文标题】:Char Doubly-linked list 【发布时间】:2013-05-04 09:15:50 【问题描述】:

我已经为双向链表创建了一个结构和函数。它对整数完美无缺,但现在我必须将其转换为使用字符。在角色方面,我总是遇到问题,当我输入一个角色时,我会得到一个恒定的循环。

到目前为止我有:

 struct node

      struct node *previous;
      char data;
      struct node *next;
*head, *last; 

 void begin(char value)
 
     struct node *temp;
 char *var=(char *)malloc(sizeof(char)*100);
 var->data=value;
 if(head==NULL)
 
     head=var;
     head->previous=NULL;
     head->next=NULL;
     last=head;
 
 else
 
     temp=var;
     temp->previous=NULL;
     temp->next=head;
     head->previous=temp;
     head=temp;
 
 

我使用了之前使用字符的 push/pop 函数中的一些示例,但我不确定我做错了什么。

编辑:忘记输入错误> null.c:14:错误:请求成员“数据”不是结构或联合 null.c:17:警告:来自不兼容指针类型的赋值

【问题讨论】:

您希望数据的大小为 1 个字符,还是尝试使数据字符串的长度为 100? 我的菜单是这样制作的,基本上它应该是在开头添加'a',添加'b',在末尾添加'c',在'c'之前插入'd',然后显示。所以只有 1 个字符,但请看下面的帖子,它修复了错误但没有返回 'a' 【参考方案1】:
char *var=(char *)malloc(sizeof(char)*100);

应该是这样的,

struct node *var= malloc( sizeof( struct node ) );

【讨论】:

谢谢,但现在当我输入 'a' 时它返回 97 而不是 'a' 嗯,是的。 'a' 是一个值为 97 的整数。如果您尝试将其打印为字符,则格式说明符是 %c,而不是 %d【参考方案2】:

没错...var的类型不是'struct node'所以你不能做var->data。

【讨论】:

【参考方案3】:

只是一个小问题:您是要创建一个单字符数据列表还是要创建一个字符串列表(每个元素中包含多个字符)?

我问'因为“malloc(sizeof(char)*100);”给我的印象是你试图保存一个长度为 100 字节的字符串,但是,该函数只接收一个字符。 (-:

【讨论】:

不,只有一个,我在上面的帮助下弄明白了。

以上是关于字符双向链表的主要内容,如果未能解决你的问题,请参考以下文章

双向链表排序c语言程序设计

C实现的可排序的双向链表

redis 5.0.7 源码阅读——双向链表

Redis源码解析——双向链表

如何在不使用额外空间的情况下检查双向链表是不是为回文?

❤️数据结构入门❤️(1 - 4)- 双向链表