永发信息网

c语言双向链

答案:2  悬赏:70  手机版
解决时间 2021-05-05 20:39

#include"stdio.h"
#include"malloc.h"
#define NULL 0
struct node
{
    char name[20];
    struct node *next,*prior;
};
struct node *creat(int n)
{
    struct node *h,*p,*s;
    int i;
    h=(struct node*)malloc(sizeof(struct node));
    h->name[0]='\0';
    h->prior=NULL;
    h->next=NULL;
    p=h;
    for(i=0;i<n;i++)
    {
        s=(struct node*)malloc(sizeof(struct node));
        p->next=s;
        printf("Input the %d student's name:",i+1);
        scanf("%s",s->name);
        s->prior=p;
        s->next=NULL;
        p=s;
    }
    p->next=NULL;
    return h;
}
struct node *search(struct node *h,char*x)
{
    struct node *p;
    char *y;
    p=h->next;
    while(p)
    {
        y=p->name;
        if(strcmp(y,x)==0)return p;
        else p=p->next;
    }
    printf("cannot find datd!\n");
}
void del(struct node *p)
{  
    p->next->prior=p->prior;
    p->prior->next=p->next;
    free(p);
}
main()
{
    int number;
    char sname[20];
    struct node *head,*sp;
    puts("Please in put the size of the list;");
    scanf("%d",&number);
    head=creat(number);
    sp=head->next;
    printf("\nNow the double list is:\n");
    while(sp)
    {
        printf("  %s",&*(sp->name));
        sp=sp->next;
    }
    printf("\nPlease input the name which you want to find:\n");
    scanf("%s",sname);
    sp=search(head,sname);
    printf("the name you want to find is: %s\n",*&sp->name);
    del(sp);
    sp=head->next;
    printf("\nNow the double list is:\n");
    while(sp)
    {
        printf("  %s",&*(sp->name));
        sp=sp->next;
    }
    printf("\n");
    puts("\n Press any key to quit...");
    getch();
}求人解释我备注了的地方

最佳答案

#include"stdio.h"
#include"malloc.h"
#define NULL 0
struct node
{
    char name[20];
    struct node *next,*prior;  //定义结构结点指针
};
struct node *creat(int n)
{
    struct node *h,*p,*s;
    int i;
    h=(struct node*)malloc(sizeof(struct node));
    h->name[0]='\0';
    h->prior=NULL;
    h->next=NULL;
    p=h;
    for(i=0;i<n;i++)
    {
    s=(struct node*)malloc(sizeof(struct node));
    p->next=s; // 让指针p所指结点指向s结点,即h结点的下一结点是s
    printf("Input the %d student's name:",i+1);
    scanf("%s",s->name);
    s->prior=p;
    s->next=NULL; //s指向空节点,即s是尾结点
    p=s; //让指针p指向向结点s,此时指针p所指结点编出s
    }
    p->next=NULL;
    return h;
}
struct node *search(struct node *h,char*x)
{
    struct node *p;
    char *y;
    p=h->next;
    while(p)
    {
    y=p->name;
    if(strcmp(y,x)==0)return p;
    else p=p->next;
    }
    printf("cannot find datd!\n");
}
void del(struct node *p)
{  
    p->next->prior=p->prior;//指针p所指结点的下一结点的头结点,指向指针p所指结点的前一节点


    p->prior->next=p->next; // 指针p所指结点的前一节点指向,指针p所指结点的后一节点


//这两步实现将p所指结点,排除到双向链表之外
    free(p); //删除p所指结点
}
main()
{
    int number;
    char sname[20];
    struct node *head,*sp;
    puts("Please in put the size of the list;");
    scanf("%d",&number);
    head=creat(number);
    sp=head->next;
    printf("\nNow the double list is:\n");
    while(sp)
    {
    printf("  %s",&*(sp->name));
    sp=sp->next;
    }
    printf("\nPlease input the name which you want to find:\n");
    scanf("%s",sname);
    sp=search(head,sname);
    printf("the name you want to find is: %s\n",*&sp->name);
    del(sp);
    sp=head->next;
    printf("\nNow the double list is:\n");
    while(sp)
    {
    printf("  %s",&*(sp->name));
    sp=sp->next;
    }
    printf("\n");
    puts("\n Press any key to quit...");
    getch();
}

全部回答

   h->prior=NULL;    是的

    s->prior=p;    保证每次建立链表的表尾都是空


    p->next->prior=p->prior;
    p->prior->next=p->next;
    free(p);
就是跳过p 把p之前的结点与之后的结点链接起来  然后安全的删除结点p

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
空间不花钱怎样就能弄好了?
难道现在的计算机高手都在监狱里吗
舞团里面会不会因为人少而自动解除?
悲惨世界摘抄句子英文,《悲惨世界》好段摘抄
巴哈迪尔汽车电器配件销售中心我想知道这个在
七夕没有情人该怎么过啊!
一天一天视频当中GD眼镜下是黑色的那是抹的什
DNF帮我把时装改成天空2
求一首歌歌里有句歌词是,我相信梦想可以冲破
什么杀毒软件最好?最好是免费的
为什么被自己爱过但现在已经不爱的人出卖了心
爱情名句郭敬明,郭敬明散文中写雨的片段
如何解决无聊?
黑莓8900下载QQ2010
龙腾世界有多少人在玩
推荐资讯
三江缘茶楼这个地址在什么地方,我要处理点事
推荐款好用的MP4,品牌不限,音质要好些,物
怎么取消舞团创建??????急急急急
讨厌的603法宝天命点了我n多保底
门锁转不动怎么办,锁芯是否能上油
游戏人生 寻仙中离开新手寻进入宁海的荣誉怎
重庆市到南宁市有几班车........票价是多少
有没和华夏磨石差不多的SF。小怪暴270点卡,
怎样快速减肥最有效?
才将活动,去哪猜奖去啊?
帮忙急!!!请问:通知单上说绑架案,但是还
摩托诺拉L6的主题可以从手机网上下载应用吗?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?