C实现链表

作者: 简简简简简书 | 来源:发表于2017-05-02 14:59 被阅读18次
typedef struct NODE
{
    int data;//数据域
    struct NODE * next;//指针域
}* Node;
//创建单链表
Node create_listNode();
//遍历
void traverse_listNode(Node node);
//判断是否是空
bool is_empty(Node node);
//链表长度
int lenth_list(Node node);
//插入(链表,位置,插入的值)
void insert_list(Node node ,int index,int data);
//删除(链表,位置,接收删除的值得指针)
void delete_list(Node node ,int index, int *pData);
//排序
void sort_list(Node node);

int main(int argc, const char * argv[]) {

    Node node = NULL;
    node = create_listNode();
    traverse_listNode(node);
    
    if (is_empty(node)) {
        printf("链表为空\n");
    }
    else
    {
        printf("链表不为空\n");
    }
    
    printf("链表的长度:%d\n",lenth_list(node));
    
    
//    sort_list(node);
//    traverse_listNode(node);
    
//    insert_list(node, 0, 6);
    
    delete_list(node, 2, NULL);
    traverse_listNode(node);
    return 0;
}
//创建单链表
Node create_listNode()
{
    
    int len;//用来存放有效节点的个数
    int val;//存放链表中的值
    
    //头节点
    Node head = (Node)malloc(sizeof(Node));
    if (head == NULL) {
        printf("分配失败");
        exit(-1);
    }
    
    //永远是下一个节点
    Node tail = head;
    //清空指向下一个节点的指针
    tail->next = NULL;
    
    printf("请输入生成链表节点的长度:len - ");
    scanf("%d",&len);
    
    for (int i = 0; i < len; i++) {
        printf("请输入第%d个节点的值:",i);
        scanf("%d",&val);
        
        Node new = (Node)malloc(sizeof(Node));
        if (new == NULL) {
            printf("分配失败");
            exit(-1);
        }
        new->data = val;
        tail->next = new;
        new->next = NULL;
        tail = new;
    }
    return (head) ;
}
//遍历
void traverse_listNode(Node node)
{
    Node p = node->next;
    while (p != NULL) {
        printf("%d    ",p->data);
        p = p->next;
    }
    printf("\n");
}
//判断是否是空
bool is_empty(Node node)
{
    //头结点指针域空
    if (node->next == NULL) {
        return true;
    }
    return false;
}
//链表长度
int lenth_list(Node node)
{
    Node p = node->next;
    int len = 0;
    while (p != NULL) {
        len++;
        p = p->next;
        
    }
    return len;
}
//插入(链表,位置,插入的值)
void insert_list(Node node ,int index,int data)
{
    int i = 0;
    Node p = node;
    
    while (p != NULL && i < index - 1) {
        p = p->next;
        i++;
    }
    
    if (i > index - 1 || p == NULL) {
        printf("插入索引错误");
        exit(-1);
    }
    
    Node new = (Node)malloc(sizeof(Node));
    if (new == NULL) {
        printf("分配内存失败");
        exit(-1);
    }
    new->data = data;
    Node  q = p->next;
    p->next = new;
    new->next = q;
}
//删除(链表,位置,接收删除的值得指针)
void delete_list(Node node ,int index, int *pData)
{
    int i = 0;
    Node p = node;
    
    while (p->next != NULL && i < index - 1) {
        p = p->next;
        i++;
    }
    
    if (i > index - 1 || p->next == NULL) {
        printf("插入索引错误");
        exit(-1);
    }
    
    Node q = p->next;
    pData = &q->data;
    p->next = p->next->next;
    free(q);
    q = NULL;
}
//排序
void sort_list(Node node)
{
    int i ,j;
    int len = lenth_list(node);
    Node p,q;
    
    for (i = 0 ,p = node->next; i < len - 1 ; i++,p = p->next) {
        for (j = i + 1,q = p->next; j < len; j++,q = q->next) {
            if (p->data > q->data) {
                int temp = p->data;
                p->data = q->data;
                q->data = temp;
            }
        }
    }
}

demo地址

相关文章

  • 链表

    单链表 C实现 Java实现 双链表 C实现 Java实现

  • Java实现简单的链表-面向初学者

    很久之前用C语言实现过链表,现在已经太久没用C语言。就先用JAVA实现一个简单链表好了,还是使用最原始的C语言实现...

  • c++ 实现队列

    相关资料: 用C++实现一个队列 数据结构代码实现之队列的链表实现(C/C++)

  • C++实现双向循环链表

    本次博文是关于利用C++模板的方式实现的双向循环链表以及双向循环链表的基本操作,在之前的博文C++语言实现双向链表...

  • LeetCode 141 环形链表 Linked List Cy

    有关链表的LeetCode做题笔记合集,Python实现 链表定义 141. 环形链表 Linked List C...

  • Redis 源码--链表。

    因为C语言是一个比较底层的语言,库内没有实现链表,于是Redis自己实现了链表。Redis的链表是一个双向链表。 ...

  • C++语言实现双向链表

    这篇文章是关于利用C++模板的方式实现的双向链表以及双向链表的基本操作,在之前的博文C语言实现双向链表中,已经给大...

  • C实现链表

    demo地址

  • C 实现链表

    前言 第一次学数据结构,代码写的可能不是很好,大神勿喷,指出来就行。 链表 顾名思义,链表就是每个数据之间有某种连...

  • C# 链表

    链表介绍 Unity 用C#写的链表类 简述链表和数组的区别 Unity--链表实现贪吃蛇

网友评论

    本文标题:C实现链表

    本文链接:https://www.haomeiwen.com/subject/fzictxtx.html