0
点赞
收藏
分享

微信扫一扫

王道数据结构2.3.8习题代码

快乐码农Alan007 2022-05-02 阅读 128

第一题(链表中递归删除元素x)

#include <stdio.h>
#include <stdlib.h>
#include<stdbool.h>

typedef int Elemtype;

typedef struct LNode
{
    Elemtype data;
    struct  LNode *next;
} LNode,*LinkList;


void Delete_x(LNode *P,LNode *C,Elemtype e)
{
    if(C==NULL)return;
    if(C->data==e)
    {
        P->next=C->next;
        free(C);
        Delete_x(P,P->next,e);
    }
    else
    {
        Delete_x(C,C->next,e);
    }
}

LinkList List_TailInsert(LinkList L)
{
    int x;
    L=(LinkList)malloc(sizeof(LinkList));
    LNode *r=L,*s;
    scanf("%d",&x);
    while(x!=9999)
    {
        s=(LNode*)malloc(sizeof(LNode*));
        s->data=x;
        r->next=s;
        r=s;
        scanf("%d",&x);
    }
    r->next=NULL;
    return L;
}

void PrintLinkList(LinkList L)
{
    printf("打印链表\n");
    LNode *r=L->next;
    while(r!=NULL)
    {
        printf("%d--->",r->data);
        r=r->next;
    }
    printf("\n");
}

int main()
{

    LinkList L;
    printf("创建链表,输入链表的值 9999表示结束!\n");
    L=List_TailInsert(L);
    PrintLinkList(L);
    printf("请输入删除指定元素:");
    int x;
    scanf("%d",&x);
    Delete_x(L,L->next,x);
    PrintLinkList(L);

    return 0;
}


第二题(删除链表中值为x的结点)

#include <stdio.h>
#include <stdlib.h>
#include<stdbool.h>

typedef int Elemtype;

typedef struct LNode
{
    Elemtype data;
    struct  LNode *next;
} LNode,*LinkList;


void Delete_x(LinkList L,Elemtype e)
{
    LNode *p=L->next,*prv=L,*q;
    while(p!=NULL)
    {
        if(p->data==e)
        {
            q=p;
            p=p->next;
            prv->next=p;
            free(q);//释放q的空间,交给操作系统
        }
        else
        {
            prv=prv->next;
            p=p->next;
        }
    }
}

LinkList List_TailInsert(LinkList L)
{
    int x;
    L=(LinkList)malloc(sizeof(LinkList));//创建头节点
    L->next=NULL;

    LNode *r=L,*s;
    scanf("%d",&x);
    while(x!=9999)
    {
        s=(LNode*)malloc(sizeof(LNode*));
        s->data=x;
        r->next=s;
        r=s;
        scanf("%d",&x);
    }
    r->next=NULL;
    return L;
}

void PrintLinkList(LinkList L)
{
    printf("打印链表\n");
    LNode *r=L->next;
    while(r!=NULL)
    {
        printf("%d--->",r->data);
        r=r->next;
    }
    printf("\n");
}



int main()
{

    LinkList L;//头指针,创建链表
    printf("创建链表,输入链表的值 9999表示结束!\n");
    L=List_TailInsert(L);
    PrintLinkList(L);
    printf("请输入删除指定元素:");
    int x;
    scanf("%d",&x);
    Delete_x(L,x);
    PrintLinkList(L);

    return 0;
}

举报

相关推荐

0 条评论