單鏈表的相關操作及代碼

1.創建結點
2.在鏈表末尾插入結點
3.刪除接點
4.查找某個結點
5.頭插法
6.尾插法
7.鏈表的長度
8.遍歷結點


#include <stdlib.h>
#include <stdio.h>
typedef struct _Node
{
	char value;
	struct _Node * next;
} Node, *PNode;
PNode header = NULL;
PNode create_node(char value)
{
	PNode node = (PNode)(malloc(sizeof(Node)));
	node->value = value;
	node->next = NULL;
	return node;
}
void push(PNode node)//在鏈表最後插入節點(投放結點)
{
	PNode cur_node = header;
	if (!header)//當header爲空
	{
		header = node;
		return;
	}
	while (cur_node->next)//當header不爲空,找到最後一個
	{
		cur_node = cur_node->next;
	}
	cur_node->next = node; //找到and 插入
}
void remove(char value)//刪除結點
{
	PNode pre_node = NULL;
	PNode cur_node = header;
	while (cur_node)//循環找到要刪除的元素
	{
		if (cur_node->value == value)//找到
		{
			break;
		}
		pre_node = cur_node;
		cur_node = cur_node->next;
	}
	if (!cur_node)//排除找不到的情況
	{
		return;
	}
	if (!pre_node)//要刪除的結點在第一個元素
	{
		header = cur_node->next;
		free(cur_node);
	}
	else//要刪除的結點在中間或者後面
	{
		pre_node->next = cur_node->next;
		free(cur_node);
	}
}
PNode find(char value)//找到某個結點
{
	PNode cur_node = header;
	while (cur_node)//逐個向後查找
	{
		if (cur_node->value == value)//找到
		{
			return cur_node;
		}
		cur_node = cur_node->next;
	}
	return NULL;
}
void insert(char value, PNode node)//將結點插入到找到的結點前面
{
	PNode cur_node = header;
	PNode pre_node = NULL;
	while (cur_node)//向後查找要插入的結點
	{
		if (cur_node->value == value)//找到
		{
			break;
		}
		pre_node = cur_node;
		cur_node = cur_node->next;
	}
	if (!cur_node)//沒找到 返回
	{
		return;
	}
	if (!pre_node)//@1 第一個節點
	{
		header = node;
		node->next = cur_node;
	}
	else//@2 中間結點
	{
		pre_node->next = node;
		node->next = cur_node;
	}
}
 void insert_head(char value, PNode node)//將結點插入到找到的結點後面
 {
 	PNode cur_node = header;
 	PNode pre_node = NULL;
 	while (cur_node)//向後查找要插入的結點
 	{
 		if (cur_node->value == value)//找到
 		{
 			break;
 		}
 		pre_node = cur_node;
 		cur_node = cur_node->next;
 	}
 	if (!cur_node)//沒找到 返回
 	{
 		return;
 	}
 	if (!pre_node)//@1 第一個節點
 	{
 		header = node;
 		node->next = cur_node;
 	}
 	else//@2 中間結點
 	{
		node->next = cur_node->next;
		cur_node->next = node;
 	}
 
 }
 //鏈表長度
 int length(PNode node)
 {
	 int len = 0;
	 PNode cur_node = header;
	 while (cur_node)
	 {
		 cur_node = cur_node->next;
		 len++;
	 }
	 return len;
 }

void traversal(void)//遍歷結點
{
	PNode node = header;
	while (node)
	{
		printf("Value: %c\n", node->value);
		node = node->next;
	}
}
int main(int ac, char * av[])
{
	
	PNode node=create_node('a');
	push(node);
	node=create_node('v');
	push(node);
	node = create_node('f');
	push(node);
	node = create_node('r');
	push(node);
	node = create_node('t');
	push(node);
	traversal();
	//remove('f');
	node = create_node('m');
	//insert('r', node);
	//insert_head('r', node);
	//traversal();
	int len = length(node);
	printf("%i\n", len);
	return 0;
}

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