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