您的位置:首页 > 其它

线性表——带头结点单链表的实现

2012-09-27 14:14 405 查看
/*
带头结点的单链表
vs2010 调试
*/

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

typedef struct LinkNode
{
int num;
struct LinkNode *next;
};

//获得链表长度
int get_length(struct LinkNode *L)
{
struct LinkNode *trace = L;
int length = 0;
if(trace == NULL)
{
return 0;
}
while(trace->next != NULL)
{
length++;
trace = trace->next;
}
return length;
}

/*
插入节点
向pos的位置插入值为num的节点
*/
int insert_LinkList(struct LinkNode *L, int num, int pos)
{
struct LinkNode *tmp_node;
struct LinkNode *trace = L;
if(pos < 0 || pos > get_length(L))
{
return 0;
}

tmp_node = (struct LinkNode *)malloc(sizeof(struct LinkNode));
tmp_node->num = num;
tmp_node->next = NULL;

while(pos != 0)
{
trace = trace->next;
pos--;
}

tmp_node->next = trace->next;
trace->next = tmp_node;

return 1;
}

/*
删除pos位置的结点链表
*/
int delete_LinkList(struct LinkNode *L, int pos)
{
struct LinkNode *trace = L;
struct LinkNode *p = NULL;
if(pos <= 0 || pos > get_length(L))
{
return 0;
}

while(--pos != 0)
{
trace = trace->next;
}

p = trace->next;
trace->next = p->next;
free(p);

return 1;
}

/*
搜索值为num的节点在链表中的位置
返回值:	-1 搜索失败; >-1 num的位置
*/
int search_LinkList(struct LinkNode *L, int num)
{
int pos = 1;
struct LinkNode *head = L->next;
while(head != NULL)
{
if(head->num == num)
{
break;
}
if((head = head->next) == NULL)
{
return -1;
}
pos++;
}

return pos;
}

/*
更新pos位置的节点值为num,原值存入num里
*/
int update_LinkList(struct LinkNode *L, int pos, int *num)
{
int tmp = 0;
struct LinkNode *trace = L;

if(pos <= 0 || pos > get_length(L))
{
return 0;
}

while(pos-- > 0)
{
trace = trace->next;
}

tmp = trace->num;
trace->num = *num;
*num = tmp;

return 1;
}

/*
打印链表元素
*/
void print_LinkList(struct LinkNode *L)
{
struct LinkNode *trace = L->next;
while(trace != NULL)
{
printf("%d ", trace->num);
trace = trace->next;
}
printf("\n");
}

/*
初始化链表
*/
struct LinkNode *init_link_list()
{
struct LinkNode *tmp_list_node = (struct LinkNode *)malloc(sizeof(struct LinkNode));
tmp_list_node->next = NULL;

return tmp_list_node;
}

int main(int argc, char *argv[])
{
int num = 12;

struct LinkNode *La = NULL;
La = init_link_list();

insert_LinkList(La, 7, 0);
insert_LinkList(La, 8, 0);
insert_LinkList(La, 9, 0);
insert_LinkList(La, 6, 1);
insert_LinkList(La, 5, 3);
print_LinkList(La);
delete_LinkList(La, 2);
print_LinkList(La);
printf("%d\n",search_LinkList(La, 5));
update_LinkList(La, 3, &num);
print_LinkList(La);

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