双链表(尾部有序)

pragma once

include

include

typedef struct _NODE
{
int index; // 学号
char name[8]; // 名字
_NODE* prev; // 前一个节点地址
_NODE* next; // 后一个节点地址
}NODE;
//插入
NODE* _insert(NODE* list_tail, int index, const char* name);
//删除
bool _remove(const char*name);
//修改
bool _modify(NODE* list_tail,int index, const char* name);
bool _remove(NODE* list_tail, int index);
NODE* _find(NODE* list_tail,int index);
void _clear(NODE* list_tail);
void _show(NODE* list_tail);

//清空链表
//bool _clear();

#include "two-way.h"
#include <math.h>
#include <stdlib.h>
#include <string.h>
//插入
NODE* _insert(NODE* list_tail, int index, const char* name)
{
    NODE* node = (NODE*)malloc(sizeof(NODE));
    memset(node,0,sizeof(NODE));
    node->index = index;
    strcpy(node->name, name);
    node-> prev=NULL;  
    node-> next=NULL;
    if (list_tail==NULL)
    {
        list_tail = node;
        return list_tail;
    }
    if (node->index>list_tail->index)
    {
        list_tail->next = node;
        node->prev = list_tail;
        return list_tail;
    }
    for (NODE* p=list_tail;p!=NULL;p=p->prev)
    {
        if (node->index < p->index && p->prev==NULL)
        {
            node->next = p;
            p->prev = node;

            return node;
        }
        if (node->index<p->index&&node->index>p->prev->index)
        {
            node->next = p;
            node->prev = p->prev;
            p->prev->next = node;
            p->prev = node;
            return node;
        }
        /*if (p->prev == NULL)
        {
            node->next = p;
            p->prev = node;
            return node;
        }
        if (node->index > p->prev->index)
        {
            node->next = p;
            node->prev = p->prev;
            p->prev->next = node;
            p->prev = node;
            return node;
        }
        */
    }
    return NULL;
}


修改
//bool _modify(NODE* list_tail, int index, const char* name)
//{
//
//}

//bool _remove(NODE* list_tail, int index)
//{
//
//}

//找到
//NODE* _find(NODE* list_tail, int index)
//{
//  
//}
//
//清空链表
//void _clear(NODE* list_tail)
//{
// 
//}


void _show(NODE* list_tail)
{
    NODE* p = NULL;
    for (p=list_tail;p!=NULL;p=p->prev)
    {
        printf("%d  %s",list_tail->index,list_tail->name);
    }
    printf("\n");
}

void main()
{
    NODE* p = NULL; 
    p = _insert(p,3,"张三");
    _show(p);
    p = _insert(p,1,"李四");
    _show(p);
    p = _insert(p,2,"王三");
    _show(p);
    system("pause");
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值