链表笔记一

链表搞了两个星期,说实话让我不用模板我还真写不来
创建链表
结构体
typedef struct library List;
typedef struct library Position;
struct library
{
    int offical_number;
    char book_name[100];
    int book_num;
    List *next;
};
链表创建
List *head, *p, *tail;
head = (List*)malloc(sizeof(List));
head->next = NULL;
puts("     输入的图书序号为'-1'时,则输入结束");
p = head;
while (1)
{
    tail = (List*)malloc(sizeof(List));
    cin >> tail->offical_number;
    getchar();
    if (tail->offical_number == -1) break;
    cin >> tail->book_name >> tail->book_num;
    p->next = tail;
    p = tail;
}
p->next = NULL;
return head;
}
链表删除
void delete1()
{
    puts("     please intput  position");
    int pos;
    cin >> pos;
    Position *P = Findnum(pos);
    List *L = Head;
    if (P == false)
    {
        puts("     Delete error,please intput right position");
        return;
    }
    if (L == NULL || pos == NULL)
    {
        puts("     Delete error,please intput right position");
        return;
    }
    else
    {
        if (P == L)
        {
            L->book_num--;
            if (!L->book_num)
            {
                L = L->next;
                Head = L;
            }
            puts("     Delete success");
            return;
        }
        else
        {
            while (L->next != NULL&&L->next != P)
                L = L->next;
            if (L->next != P)
            {
                puts("     Delete error,please intput right position");
                return;
            }
            else
            {
                L->next->book_num--;
                if (!L->next->book_num)
                {
                    L->next = L->next->next;
                }
                puts("     Delete success");
            }
        }
    }
}
链表排序
void Sort_offical_num()
{
    List *p, *q, *min;
    for (p = Head; p != NULL; p = p->next)
    {
        min = p;
        for (q = p->next; q != NULL; q = q->next)
        {
            if (q->offical_number < min->offical_number)
            {
                min = q;
            }
        }
        if (min != p)
        {
            swap_num(min->book_num, p->book_num);
            swap_num(min->offical_number, p->offical_number);
            swap_char(min->book_name, p->book_name);
        }
    }
    puts("     排序成功");
}
链表查找
Position *Findnum(int x)
{
    Position *L = Head;
    if (L == NULL)
        return false;
    else
    {
        while (L)
        {
            if (L->offical_number == x)
                return L  ;
            L = L->next;
        }
    }
    return false;
}
链表插入
bool Insert(List L, ElementType X, Position P)//:将X插入在位置P指向的结点之前,返回true。如果参数P指向非法位置,则打印“Wrong Position for Insertion”,返回false;
{
    List F = L;
    while (L->Next)
    {
        if (L->Next == P)break;
        L = L->Next;
    }
    if (L->Next != P)
    {
        printf("Wrong Position for Insertion\n");
        return false;
    }
    L->Next = (List)malloc(sizeof(struct LNode));
    L->Next->Data = X;
    L->Next->Next = P;
    return true;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值