Snail—数据结构学习之单向链表

// 定义链表的数据结构
typedef struct _LINK_NODE{
    int data;
    struct _LINK_NODE * next;
}LINK_NODE;

//创建一个单向链表
LINK_NODE * create(){
    int inputFlag = 1,value;
    LINK_NODE *head,*p,*s;
    head = (LINK_NODE *)malloc(sizeof(LINK_NODE));
    p = head;
    while (inputFlag) {
        printf("请输入阿拉伯数字,0结束输入:\n");
        scanf("%d",&value);
        if (value != 0) {
            s = (LINK_NODE *)malloc(sizeof(LINK_NODE));
            s->data = value;
            p->next = s;
            p = s;
        }else{
            inputFlag = 0;
        }
    }
    p->next = NULL;
    head = head->next;
    return head;
}

//得到链表的长度
int length(LINK_NODE * head){
    int length = 0;
    LINK_NODE *p = head;
    while (p != NULL) {
        p = p->next;
        length++;
    }
    return length;
}

//打印单链表
void print(LINK_NODE * head){
    LINK_NODE *p = head;
    while (p) {
        printf("%d ",p->data);
        p = p->next;
    }
}

//删除指定的数据
LINK_NODE * delete(LINK_NODE * head,int num){
    
    LINK_NODE *p,*q;
    p = head;
    while (num != p->data && p->next != NULL) {
        q = p;
        p = p->next;
    }
    if (num == p->data) {
        if (p == head) {
            head = p->next;
            free(p);
        }else{
            q->next = p->next;
            free(p);
        }
    }else{
        printf("没找到");
    }
    return head;
}

//进行排序 选择排序
LINK_NODE * sort(LINK_NODE * head){
    
    LINK_NODE *p;
    if (head == NULL && head->next == NULL) {
        return head;
    }
    int len = length(head);
    for (int i = 0; i < len - 1; i++) {
        p = head;
        for (int j = i + 1; j < len; j++) {
            if (p->data > p->next->data) {
                int temp = p->data;
                p->data = p->next->data;
                p->next->data = temp;
            }
            p = p->next;
        }
    }
    return head;
}

//链表倒序
LINK_NODE * reverse(LINK_NODE * head){
    
    if (head == NULL && head->next == NULL) {
        return head;
    }
    int len = length(head);
    int a[len];
    int i = 0;
    LINK_NODE *p = head;
    while (p != NULL) {
        a[i++] = p->data;
        p = p->next;
    }
    
    LINK_NODE * newHead,*link,*s;
    newHead = (LINK_NODE *)malloc(sizeof(LINK_NODE));
    link = newHead;
    for (int k = len - 1; k >= 0;k--) {
        s = (LINK_NODE *)malloc(sizeof(LINK_NODE));
        s->data = a[k];
        link->next = s;
        link = s;
    }
    newHead = newHead->next;
    link->next = NULL;
    return newHead;
}

//

int main(int argc, const char * argv[]){
    
    LINK_NODE * head = create();
    printf("%d\n",length(head));
    print(head);
    printf("\n");
    print(sort(head));
    printf("\n");
    print(reverse(head));
    //print(delete(head, 5));
    
    
    
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: Lucene的数据结构包括索引文件和存储文件。索引文件包含了文档的元数据和词项的位置信息,而存储文件则包含了实际的文档内容。\[1\]在Lucene 6.0之后,引入了点数据(Point Value)的概念,通过生成KD-tree结构来实现快速的范围查询和多维度形状的过滤。索引文件中的数据结构由一系列的block组成,展现为一颗满二叉树,叶子节点描述了所有的点数据。\[2\]在Lucene的基本结构中,包括文档编号、段(segment)的信息和文件信息。文档编号用于唯一标识每个文档,段(segment)的信息包括段的元数据和词项的位置信息,文件信息包括索引文件和存储文件的详细信息。\[3\] #### 引用[.reference_title] - *1* *3* [lucene的数据类型](https://blog.csdn.net/u013200380/article/details/114132370)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [lucene7.5的数据结构](https://blog.csdn.net/u013200380/article/details/114133816)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值