如何将单词保存到动态列表中

势力

所以我设法创建了一个动态列表,目前我只能在每个节点中插入一个字符,我可以删除一个节点并打印整个列表,但是我在尝试更改列表时遇到了很多麻烦,以便我可以在每个节点中插入一个动态数组并将其打印到文件中,有人能给我一些建议吗?

#include <stdio.h>
#include <stdlib.h>
// self-referential structure                       
struct listNode {                                      
   char * data; // each listNode contains a character 
   struct listNode *nextPtr; // pointer to next node
}; 
typedef struct listNode ListNode; // synonym for struct listNode
typedef ListNode *ListNodePtr; // synonym for ListNode*
// prototypes
void insert(ListNodePtr *sPtr, char value);
char delete(ListNodePtr *sPtr, char value);
int isEmpty(ListNodePtr sPtr);
void printList(ListNodePtr currentPtr);
void instructions(void);
int main(void)
{ 
   ListNodePtr startPtr = NULL; // initially there are no nodes
   char item; // char entered by user
   instructions(); // display the menu
   printf("%s", "? ");
   unsigned int choice; // user's choice
   scanf("%u", &choice);
   // loop while user does not choose 3
   while (choice != 3) { 
      switch (choice) { 
         case 1:
            printf("%s", "Enter a character: ");
            scanf("\n%c", &item);
            insert(&startPtr, item); // insert item in list
            printList(startPtr);
            break;
         case 2: // delete an element
            // if list is not empty
            if (!isEmpty(startPtr)) { 
               printf("%s", "Enter character to be deleted: ");
               scanf("\n%c", &item);
               // if character is found, remove it
               if (delete(&startPtr, item)) { // remove item
                  printf("%c deleted.\n", item);
                  printList(startPtr);
               } 
               else {
                  printf("%c not found.\n\n", item);
               } 
            } 
            else {
               puts("List is empty.\n");
            } 
            break;
         default:
            puts("Invalid choice.\n");
            instructions();
            break;
      } // end switch
      printf("%s", "? ");
      scanf("%u", &choice);
   } 
   puts("End of run.");
} 
// display program instructions to user
void instructions(void)
{ 
   puts("Enter your choice:\n"
      "   1 to insert an element into the list.\n"
      "   2 to delete an element from the list.\n"
      "   3 to end.");
} 
// insert a new value into the list in sorted order
void insert(ListNodePtr *sPtr, char value)
{ 
   ListNodePtr newPtr = malloc(sizeof(ListNode)); // create node
   if (newPtr != NULL) { // is space available
      newPtr->data = value; // place value in node
      newPtr->nextPtr = NULL; // node does not link to another node
      ListNodePtr previousPtr = NULL;
      ListNodePtr currentPtr = *sPtr;
      // loop to find the correct location in the list       
      while (currentPtr != NULL && value > currentPtr->data) {
         previousPtr = currentPtr; // walk to ...               
         currentPtr = currentPtr->nextPtr; // ... next node 
      }                                          
      // insert new node at beginning of list
      if (previousPtr == NULL) { 
         newPtr->nextPtr = *sPtr;
         *sPtr = newPtr;
      } 
      else { // insert new node between previousPtr and currentPtr
         previousPtr->nextPtr = newPtr;
         newPtr->nextPtr = currentPtr;
      } 
   } 
   else {
      printf("%c not inserted. No memory available.\n", value);
   } 
} 
// delete a list element
char delete(ListNodePtr *sPtr, char value)
{ 
   // delete first node if a match is found
   if (value == (*sPtr)->data) { 
      ListNodePtr tempPtr = *sPtr; // hold onto node being removed
      *sPtr = (*sPtr)->nextPtr; // de-thread the node
      free(tempPtr); // free the de-threaded node
      return value;
   } 
   else { 
      ListNodePtr previousPtr = *sPtr;
      ListNodePtr currentPtr = (*sPtr)->nextPtr;
      // loop to find the correct location in the list
      while (currentPtr != NULL && currentPtr->data != value) { 
         previousPtr = currentPtr; // walk to ...  
         currentPtr = currentPtr->nextPtr; // ... next node  
      } 
      // delete node at currentPtr
      if (currentPtr != NULL) { 
         ListNodePtr tempPtr = currentPtr;
         previousPtr->nextPtr = currentPtr->nextPtr;
         free(tempPtr);
         return value;
      } 
   } 
   return '\0';
} 
// return 1 if the list is empty, 0 otherwise
int isEmpty(ListNodePtr sPtr)
{ 
   return sPtr == NULL;
} 
// print the list
void printList(ListNodePtr currentPtr)
{ 
   // if list is empty
   if (isEmpty(currentPtr)) {
      puts("List is empty.\n");
   } 
   else { 
      puts("The list is:");
      // while not the end of the list
      while (currentPtr != NULL) { 
         printf("%c --> ", currentPtr->data);
         currentPtr = currentPtr->nextPtr;   
      } 
      puts("NULL\n");
   } 
} 
保罗·奥格维

您必须打开编译器的警告。它会告诉你哪里违反了 C 的某些规则。例如,newPtr->data = value;应该抱怨因为它data是一个指针,但它value是一个字符。

但是,您应该使用"%s"格式说明符从用户读取字符串scanf到足够大的缓冲区(或在读取时给出边界),例如缓冲区char strbuf[256];

您将此缓冲区传递给insert. 不是将其分配valuedata,而是首先分配一个新字符串,然后将值复制到新字符串:

newPtr->data = malloc(strlen(value)+1);
strcpy(newPtr->data, value);

(此答案不包括您的解决方案可能存在的任何其他错误或问题。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将stdout动态保存到变量,列表或numpy数组中?

来自分类Dev

R:如何将列表保存到csv中?

来自分类Dev

如何将坐标列表保存到隔离存储中?

来自分类Dev

如何将字典列表保存到文件中?

来自分类Dev

如何将列表中的结果保存到.txt文件?

来自分类Dev

如何将值保存到 C# 中的列表

来自分类Dev

如何将列表保存到 .txt?

来自分类Dev

Cakephp:如何将阿拉伯语单词保存到mysql表中?

来自分类Dev

如何将两个单词之间的信息块保存到文件中?

来自分类Dev

如何将两个单词之间的信息块保存到文件中?

来自分类Dev

如何将单词列表和这些单词在句子中的位置保存为文件

来自分类Dev

如何将 C#.NET MVC 中的用户输入数据保存到列表中?

来自分类Dev

如何将值从 ansible 中的多个任务保存到列表 var 中?

来自分类Dev

如何将数据从TextForm保存到列表

来自分类Dev

python 2.7-如何将图像从CSV文件中的URL列表保存到目录

来自分类Dev

如何将种子随机sort_by {rand}的随机值保存到红宝石列表中?

来自分类Dev

如何将列表框项目保存到字符串中

来自分类Dev

如何将列表保存到文件并再次读入(在R中)?

来自分类Dev

如何将字符串及其状态保存到列表中?

来自分类Dev

如何将一组项目(主题)保存到列表中并保存在数据库中

来自分类Dev

按下按钮时将生成的单词保存到单词数组/列表中

来自分类Dev

如何将JTextArea中的值保存到JTable中?

来自分类Dev

如何将模板中的动态表传递给视图,以将其迭代保存到数据库中

来自分类Dev

如何将数据缓存到 R 中的列表中?

来自分类Dev

如何将哈希集保存到Android中的文件?

来自分类Dev

如何将printf的结果保存到GDB中的变量?

来自分类Dev

如何将customadapter中的arraylist保存到SharedPreference

来自分类Dev

如何将Ajax调用值保存到变量中

来自分类Dev

如何将HashDicts保存到Elixir中的文件

Related 相关文章

  1. 1

    如何将stdout动态保存到变量,列表或numpy数组中?

  2. 2

    R:如何将列表保存到csv中?

  3. 3

    如何将坐标列表保存到隔离存储中?

  4. 4

    如何将字典列表保存到文件中?

  5. 5

    如何将列表中的结果保存到.txt文件?

  6. 6

    如何将值保存到 C# 中的列表

  7. 7

    如何将列表保存到 .txt?

  8. 8

    Cakephp:如何将阿拉伯语单词保存到mysql表中?

  9. 9

    如何将两个单词之间的信息块保存到文件中?

  10. 10

    如何将两个单词之间的信息块保存到文件中?

  11. 11

    如何将单词列表和这些单词在句子中的位置保存为文件

  12. 12

    如何将 C#.NET MVC 中的用户输入数据保存到列表中?

  13. 13

    如何将值从 ansible 中的多个任务保存到列表 var 中?

  14. 14

    如何将数据从TextForm保存到列表

  15. 15

    python 2.7-如何将图像从CSV文件中的URL列表保存到目录

  16. 16

    如何将种子随机sort_by {rand}的随机值保存到红宝石列表中?

  17. 17

    如何将列表框项目保存到字符串中

  18. 18

    如何将列表保存到文件并再次读入(在R中)?

  19. 19

    如何将字符串及其状态保存到列表中?

  20. 20

    如何将一组项目(主题)保存到列表中并保存在数据库中

  21. 21

    按下按钮时将生成的单词保存到单词数组/列表中

  22. 22

    如何将JTextArea中的值保存到JTable中?

  23. 23

    如何将模板中的动态表传递给视图,以将其迭代保存到数据库中

  24. 24

    如何将数据缓存到 R 中的列表中?

  25. 25

    如何将哈希集保存到Android中的文件?

  26. 26

    如何将printf的结果保存到GDB中的变量?

  27. 27

    如何将customadapter中的arraylist保存到SharedPreference

  28. 28

    如何将Ajax调用值保存到变量中

  29. 29

    如何将HashDicts保存到Elixir中的文件

热门标签

归档