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;
}
#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;
}
相关文章推荐
- 链表(LinkList)的设计与实现(初始化,创建,插入,删除,逆置)
- linkList 简单链式链表的实现
- C++实现的链表,LinkList
- 单链表LinkList的实现
- linkList C++简单链式链表的实现
- Java自己实现双向链表LinkList
- 线性表之<链表linklist>的储存及插入、删除-C代码实现
- Java自己实现双向链表LinkList
- 用单链表实现运算 A-(B∩C) (Set operation A-(B∩C) base on linklist)
- 链表的链性表的c语言实现方式 linklist.h 和 linklist.c
- 单向链表装载用户自定义数据的c语言实现 linklistpackagenode.h 和 linklistpackagenode.c
- 链表LinkList.c实现
- C++链表实现堆栈:LinkList:Build a linklist using C++ class Stack
- DataStructure---LinkList 链表C语言实现代码
- 一个简单的双向循环链表的实现
- 【LeetCode-面试算法经典-Java实现】【142-Linked List Cycle II(单链表中有环II)】
- C++之实现两个链表合并(迭代和递归版本)(19)---《那些奇怪的算法》
- 数据结构——链表的C++实现
- 实现链表逆序(头插)
- 数据结构C++模板实现之----------------单向链表