線性表——帶頭結點單鏈表的實現

/*
	帶頭結點的單鏈表
	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;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章