带字符串的双链表

时间:2013-12-24 22:49:41

标签: c

我正在尝试通过输入字符串在C中构建一个双向链表,我想要清楚,如果我是对的。我很难解释所以我会发布我的内容。我是C的新手所以请纠正我,我希望我是对的,请告诉我是否最好发布我的整个代码。

好的,所以我的看法是这样的:

 struct node
 {


  char data[100];
  struct node *previous;  // Points to the previous node
  struct node *next;   // Points out to the next node
 }*head, *last;

这是一个在开头插入的函数:

 void insert_beginning(char words[100])
 {
  struct node *var, *temp;
  var=(struct node *)malloc(sizeof(struct node));
  var->data[100]=words[100];

  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;
   }
 }

这是我的主要内容:

 int main()
 {
char words[100];
int i;

head=NULL;

printf("Select the choice of operation on link list");
printf("\n1.) insert at begining\n2.) insert at at\n3.) insert at middle");
printf("\n4.) delete from end\n5.) reverse the link list\n6.) display list\n7.)exit");

while(1)
{
    printf("\n\n Enter the choice of operation you want to do ");
    scanf("%d",&i);

    switch(i)
    {
        case 1:
        {
            printf("Enter the value you want to insert in node ");
            scanf(" %s",&words);

            insert_beginning(words);
            display();
            break;
        }

我只想确定这3个部分是否正确。我错过了什么吗? 感谢帮助。我希望我没有复杂化任何问题,并根据需要提出问题。

1 个答案:

答案 0 :(得分:0)

您的函数insert_beginning有问题:

  var=(struct node *)malloc(sizeof(struct node));
  var->data[100]=words[100]

通过这两行你想要制作words数组的副本并将其放在列表的节点上:) 但是你的实现是错误的,你只需从char数组复制第100个words(这是数组的界限,因为第一个字符串从0开始,最后一个是99指数)节点data第100个字符。

您必须复制所有words内容,以便使用strncpy功能执行此操作:

strncpy(var->data, words, 100);

所以你的功能似乎是这样的:

 void insert_beginning(char words[100])
 {
  struct node *var, *temp;
  var=(struct node *)malloc(sizeof(struct node));
  strncpy(var->data, words, 100);

  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;
   }
 }

不要使用strcpy cuz不是针对缓冲区溢出的安全函数,请使用strncpy

它只是为了修复我不明白你想做什么的主要部分。