双链表查询

时间:2018-10-26 10:47:38

标签: c linked-list

所以我创建了一个使用双链表和     对它执行一些操作。问题是它显示垃圾     价值观      最后,每次我尝试创建一个链表然后显示它时。        我的代码有什么问题?(抱歉!缩进不良)       如果我创建的链表包含15和16元素,则将其显示为       15 16 25710 0 0

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
struct dll
{
    int data;
    struct dll *llink;
    struct dll *rlink;
};
typedef struct dll *node;
node head=NULL;
void create();
int search(int u);
void insert(int num1);
void Delete(int num2);
void display();
node getnode();
int main()
{
    int i,num,o;
    while(1)
    {
        printf("\n1.create a list\n 2. insert before a search node\n 3. delete a node\n 4.display\n 5.exit\n");
        scanf("%d",&num);
        switch(num)
        {
        case 1 :
            create();
            break;
        case 2 :
            printf("enter the value before which you want to enter the node\n");
            scanf("%d",&i);
            insert(i);
            break;
        case 3 :
            printf("enter the value to be deleted\n");
            scanf("%d",&o);
            Delete(o);
            break;
        case 4 :
            printf("the linked list has :\n");
            display();
            break;
        case  5 :
            getch();
            exit(1);
        default :
            printf("enter the correct option\n");
            break;
        }
    }
}
node getnode()
{
    node temp1;
    temp1=(node)malloc(sizeof(node));
    temp1->llink=NULL;
    temp1->rlink=NULL;
    return temp1;
}
void create()
{
    node nn;
    int num,y;
    if(head==NULL)
        head=getnode();
    while(1)
    {
        printf("enter the data for the node");
        scanf("%d",&num);
        head->data=num;
        printf("do you want to create another node(1/0):\n");
        scanf("%d",&y);
        if(y==1)
        {
            nn=getnode();
            nn->rlink=head;
            head->llink=nn;
            head=nn;
            nn=NULL;
        }
        else
            break;
    }
}
void  insert (int num1)
{
    int i,n,k;
    node temp=head,nn;
    n=search(num1);
    if(n==0)
    {
        printf("element not present in the linked list");
    }
    if(n==1)
    {
        nn=getnode();
        printf("enter the data for the node");
        scanf("%d",&k);
        nn->data=k;
        nn->rlink=head;
        head->llink=nn;
        head=nn;
        nn=NULL;
    }
    else
    {
        for(i=2; i<=n; i++)
            temp=temp->rlink;
        nn=getnode();
        temp->llink->rlink=nn;
        nn->llink=temp->llink;
        nn->rlink=temp;
        temp->llink=nn;
    }
}
void Delete(int num2)
{
    node temp=head;
    int p,i;
    p=search(num2);
    if(p==0)
    {
        printf("no element is found");
    }
    if(p==1)
    {
        printf("the deleted element is %d",head->data);
        head=head->rlink;
        head->llink=NULL;
        free(temp);
    }
    else
    {
        for(i=2; i<=p; i++)
        {
            temp=temp->rlink;
        }
        temp->llink->rlink=temp->rlink;
        temp->rlink->llink=temp->llink;
        free(temp);
        temp=temp->rlink;
    }
}
int search(int u)
{
    node temp=head;
    int pos=0;
    if(u==head->data)
        return 1;
    else
    {
        while(temp!=NULL)
        {
            pos++;
            if(temp->data==u)
            {
                printf("element found\n");
                return(pos);
            }
            temp=temp->rlink;
        }
    }
    if(temp==NULL)
    {
        return 0;
    }
    return -1;
}
void display()
{
    node temp=head;
    while(temp!=NULL)
    {
        printf("%d\n",temp->data);
        temp=temp->rlink;
    }
}

1 个答案:

答案 0 :(得分:0)

此:

temp1=(node)malloc(sizeof(node));

是一个主要错误。由于您是“隐藏星星”,并且node是指针类型的typedef,因此您分配足够的内存。应该是:

node temp1 = malloc(sizeof *temp1);

但是我真的建议不要typedef移开指针,这只会使事情变得混乱。