c实现简单链表

Posted tiancun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c实现简单链表相关的知识,希望对你有一定的参考价值。

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

struct node {
    int data;
    struct node *next;
};

int datas[] = { 1, 2, 4, 8, 16, 32, 64, 128 };

void list_head_init(struct node *head)
{
    head->data = 0;
    head->next = NULL;
}

int  list_empty(struct node *head)
{
    return head->next == NULL;
}

void list_add_tail(struct node *new_node, struct node *head)
{
    struct node *p = head;

    while (p->next) {
        p = p->next;
    }
    p->next = new_node;
}

void list_del_next(struct node *head)
{
    struct node *p = head->next;

    if (list_empty(head)) return;

    head->next = p->next;
    free(p);
}
void list_del(int data, struct node *head) {
    struct node *p,*del;
    if (head == NULL)
        return;
    if (head->data == data) {
        del = head;
        head = head->next;
        free(del);return;
    }
    if (head->next->data == data) {
        del = head->next;
        head->next = head->next->next;
        free(del);return;
    }

    p = head;
    do {
        if (p->next->data == data) {
            del = p->next;
            p->next = p->next->next;
            free(del);return;
        }
        p = p->next;
    } while (p->next);
}

void list_destroy(struct node *head)
{
    while (head->next)
        list_del_next(head);
}

void list_create(struct node *head)
{
    struct node *new_node;
    int i;

    for (i = 0; i < sizeof(datas) / sizeof(datas[0]); i++) {
        new_node = (struct node *)malloc(sizeof(struct node));
        new_node->data = datas[i];
        new_node->next = NULL;

        list_add_tail(new_node, head);
    }
}

void list_dump(struct node *head)
{
    struct node *p = head->next;

    while (p) {
        printf("%8d", p->data);
        p = p->next;
    }
    printf("\n");
}

int main(void)
{
    struct node root, *head = &root;

    list_head_init(head);

    list_create(head);
    list_dump(head);

    list_del(16,head);

    list_dump(head);

    list_destroy(head);

    printf("Over\n");
    getchar();
    return 0;
}

以上是关于c实现简单链表的主要内容,如果未能解决你的问题,请参考以下文章

纯C语言(C89)实现简单链表

c实现简单链表

C语言两个链表连接简单问题

C语言实现创建一个集合用链表。事先并不知道元素个数。

c语言!!!程序设计:建立一个学生信息链表,包括学号,姓名,成绩.(实现添加,删除,查询,排序,平均)

C 基础 - 链表