“ 忠诚、笃学、严谨、守纪 ”

点击任意处进入

数据结构作业2

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

typedef int DataType;

typedef struct Node
{
    DataType data;     // 值域
    struct Node *next; // 指针域
} *PNode, *LinkList;



// 1.创建空链表
LinkList creatNullList_link() // 创建空链表
{
    LinkList llist;
    llist = (LinkList)malloc(sizeof(struct Node)); // 创建头结点
    if (llist == NULL)
    {
        printf("内存分配失败!");
        return 0;
    }

    llist->next = NULL;

    return llist; // 函数值返回
}

// 2.判断链表空吗
int isNullList_link(LinkList llist)
{
    return (llist->next == NULL);
}

// 3.求第一个值为x的结点的存储位置
PNode locate_link(LinkList llist, DataType x)
{
    PNode p;
    p = llist->next;
    while (p != NULL && p->data != x)
    {
        p = p->next;
    }

    return p;
}

// 4.在p所指节点后面插入一个值为x的新结点
int insertPost_link(LinkList llist, PNode p, DataType x)
{
    PNode q = (PNode)malloc(sizeof(struct Node));
    if (q == NULL)
    {
        printf("Out of space!\n");
        return 0;
    }
    else
    {
        q->data = x;
        q->next = p->next; // 注意顺序
        p->next = q;
        return 1;
    }
}

// 5.在p所指节点前面插入一个值为x的新结点
int insertPre_link(LinkList llist, PNode p, DataType x)
{
    // 1. 检查插入位置是否合法
    if (llist == NULL || p == NULL)
    {
        return 0;
    }

    PNode s = llist;
    while (s->next != NULL && s->next != p)
    {
        s = s->next;
    }

    if (s->next != p)
    {
        return 0;
    }

    PNode q = (PNode)malloc(sizeof(struct Node));
    if (q == NULL)
    {
        printf("Out of space!\n");
        return 0;
    }
    else
    {
        q->data = x;
        q->next = s->next;
        s->next = q;
    }

    return 1;
}

// 6.在链表中查找值为x的结点并删除
int deleteV_link(LinkList llist, DataType x)
{
    PNode q, p = llist;

    while (p->next != NULL && p->next->data != x)
        p = p->next;
    if (p->next == NULL)
    {
        printf("Not exist!");
        return 0;
    }
    else
    {
        q = p->next;
        p->next = q->next;
        free(q);
        return 1;
    }
}
// 7.删除指针p指向的结点
int deleteP_link(LinkList llist, PNode p)
{
    PNode q = llist;

    while (q->next != NULL && q->next != p)
        q = q->next;
    if (q->next == NULL)
    {
        printf("Not exist!");
        return 0;
    }
    else
    {
        q->next = p->next;
        free(p);
        return 1;
    }
}
posted @ 2026-04-19 09:52  alonep  阅读(13)  评论(0)    收藏  举报