码迷,mamicode.com
首页 > 其他好文 > 详细

c实现简单链表

时间:2017-09-29 12:38:22      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:over   main   turn   size   链表   getchar   head   etc   ini   

#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实现简单链表

标签:over   main   turn   size   链表   getchar   head   etc   ini   

原文地址:http://www.cnblogs.com/tiancun/p/7610465.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!