/*
带头结点的单链表
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;
}
线性表——带头结点单链表的实现
最新推荐文章于 2023-03-25 10:54:20 发布