您的位置:首页 > 理论基础 > 数据结构算法

数据结构--单链表c语言实现

2014-11-03 23:38 537 查看
List.h如下:

#ifndef __LIST_H
#define __LIST_H

typedef struct Node
{
int data;
struct Node *next;
}Node, *List;

void InitList(List list);

bool Insert_Head(List list, int val);

bool Insert_Tail(List list, int val);

Node *Search(List list, int key);

Node *SearchPre(List list, int key);//查找key的前驱

bool Delete(List list, int key);

int Length(List list);//返回链表的数据节点个数

void Show(List list);

void Destroy(List list);//删除list所有数据节点

#endif


List.c如下:

#include "List.h"
#include <stdlib.h>
#include <assert.h>
#include <stdio.h>

static Node *BuyNode(int val)
{
Node *p = (Node*)malloc(sizeof(Node));
assert(p != NULL);
p->data = val;
p->next = NULL;
return p;
}

void InitList(List list)
{
assert(list != NULL);
list->next = NULL;//(*list).next = NULL;
}

bool Insert_Head(List list, int val)
{
//Node node;//error
//node.data = val;
//node.next = list->next;
//list->next = &node;
Node *p = BuyNode(val);
p->next = list->next;
list->next = p;

return true;
}

bool Insert_Tail(List list, int val)
{
Node *p = list;
while (p->next != NULL)
{
p = p->next;
}

p->next = BuyNode(val);
return true;

//p=list->next;//NULL
//while(p!=NULL)
//{
//	p = p->next;
//}
//p++;
}

Node *Search(List list, int key)
{
for (Node *p = list->next; p != NULL; p = p->next)
{
if (p->data == key)
{
return p;
}
}
return NULL;
}

Node *SearchPre(List list, int key)//查找key的前驱
{
for (Node *p = list; p->next != NULL; p = p->next)
{
if (p->next->data == key)
{
return p;
}
}
return NULL;
}

bool Delete(List list, int key)
{
Node *p = SearchPre(list, key);
if (p == NULL)
{
return false;
}
Node *q = p->next;
p->next = q->next;
free(q);
//free(p->next);//error
//p->next = p->next->next;

return true;
}

int Length(List list)//返回链表的数据节点个数
{
int count = 0;
for (Node *p = list->next; p != NULL; p = p->next)
{
count++;
}
return count;
}

void Show(List list)
{
for (Node *p = list->next; p != NULL; p = p->next)
{
printf("%d ", p->data);
}
printf("\n");

}

void Destroy(List list)//删除list所有数据节点
{
while (list->next != NULL)
{
Node*p = list->next;
list->next = p->next;
free(p);
}
/*
Node *p = list->next;
Node *q;
list->next = NULL;
while(p!=NULL)
{
q = p->next;
free(p);
p = q;
}
*/
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: