1. 程式人生 > >c實現簡單鏈表

c實現簡單鏈表

clu eof print 實現 ext 實現簡單 std [0 des

#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實現簡單鏈表