您的位置:首页 > 其它

linklist 链表的实现

2013-08-19 21:06 204 查看
#include <stdio.h>

#include <stdlib.h>

typedef struct _link_node_{
int data;
struct _link_node_ *next;

}LinkNode;

LinkNode *creat_linklist(void);

LinkNode *creat_linknode(int value);

int insert_linklist(LinkNode *head, int value);

int show_linklist(LinkNode *head);

//int search_linklist(LinkNode *head, int value);

LinkNode *search_linklist(LinkNode *head, int value);

int modify_linklist(LinkNode *head, int obj, int value);

int delet_linklist(LinkNode *head, int obj);

int free_linklist(LinkNode *head);

int main()

{
LinkNode *head = NULL;
LinkNode *locate = NULL;

head = creat_linklist();

insert_linklist(head, 100);
insert_linklist(head, 200);
locate = search_linklist(head, 1000);
if(locate)
printf("locate: %d\n", locate->data);
modify_linklist(head, 1000, 1000);
show_linklist(head);
delet_linklist(head, 200);
show_linklist(head);
free_linklist(head);
return 0;

}

LinkNode *creat_linknode(int value)

{
LinkNode *node = NULL;

node = (LinkNode *)malloc(sizeof(LinkNode));
node->data = value;
node->next = NULL;

return node;

}

LinkNode *creat_linklist(void)

{
return creat_linknode(0);

}

int insert_linklist(LinkNode *head, int value)

{
LinkNode *node = NULL;

node = creat_linknode(value);
node->next = head->next;
head->next = node;

return 0;

}

int show_linklist(LinkNode *head)

{
LinkNode *p = head->next;

while(NULL != p)
{
printf("%3d ", p->data);
p = p->next;
}
putchar('\n');
return 0;

}

#if 0

int search_linklist(LinkNode *head, int value)

{
int nu = 1;
LinkNode *p = head->next;

while(NULL != p)
{
if(p->data == value)
return nu;
nu ++;
p = p->next;
}
return -1;

}

#else

LinkNode *search_linklist(LinkNode *head, int value)

{
LinkNode *p = head->next;

while(NULL != p)
{
if(p->data == value)
return p;
p = p->next;
}
return NULL;

}

#endif

int modify_linklist(LinkNode *head, int obj, int value)

{
LinkNode *locate = NULL;

locate = search_linklist(head, obj);
if(NULL == locate)
return -1;
locate->data = value;

return 0;

}

int delet_linklist(LinkNode *head, int obj)

{
LinkNode *p = head;
LinkNode *tmp = NULL;

while(NULL != p->next && p->next->data != obj)
p = p->next;

if(NULL == p->next)
return -1;
tmp = p->next;
p->next = tmp->next;
free(tmp);
return 0;

}

int free_linklist(LinkNode *head)

{
LinkNode *tmp = NULL,
*p = head;

while(NULL != p)
{
tmp = p;
p = p->next;
free(tmp);
}
return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: