數據結構--單鏈表總結

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

typedef struct Link
{
	int data;
	struct Link* next;
}link;

//創建鏈表
link* InitLink()
{
	link* p = (link*)malloc(sizeof(link));
	link* temp = p;
	for (int i = 1; i < 6; ++i)
	{
		link* a = (link*)malloc(sizeof(link));
		a->data = i;
		a->next = NULL;

		temp->next = a;
		temp = temp->next;
	}
	return p;
}

//插入元素
//num爲插入元素,add爲插入位置
link* InsertData(link* p,int num,int add)
{
	link* temp = p;
	//找到要插入的位置
	for (int i = 1; i < add; ++i)
	{
		temp = temp->next;
		if (temp == NULL)
		{
			printf("插入位置無效");
			return p;
		}
	}
	//創建插入節點C
	link* c = (link*)malloc(sizeof(link));

	c->data = num;
	//先鏈接後面,在連接前面
	c->next = temp->next;
	temp->next = c;
	return p;
}

//刪除元素,將節點從鏈表中取下,再釋放存儲空間
link* DelData(link* p,int num)
{
	link* temp = p;
	for (int i = 1; i < num; ++i)
	{
		temp = temp->next;
		if (temp->next == NULL)
		{
			printf("沒有該節點");
			return p;
		}
	}
	link* del = temp->next; //單獨設置一個指針指向被刪除節點,防止丟失
	temp->next = temp->next->next;
	free(del);
	return p;
}

//查找元素,遍歷法
int findData(link* p,int num)
{
	link *t = p;
	int i = 1;
	while (t->next)
	{
		t = t->next;
		if (t->data==num)
		{
			return i;
		}
		i++;
	}
	return -1;
}

//更新元素
link* ChangeData(link* p,int add,int newdata)
{
	link* temp = p;
	temp = temp->next; //讓temp指向首元節點
	
	//遍歷更新節點
	for (int i = 1; i < add; ++i)
	{
		temp = temp->next;
	}
	temp->data = newdata;
	return p;
}

//打印
void  Print(link* p)
{
	link* temp = p;
	while (temp->next)
	{
		temp = temp->next;
		printf("%d ",temp->data);
	}
	printf("\n");
}
int main()
{
	link* p = InitLink();
	Print(p);

	//第4個位置插入5
	p = InsertData(p,5,4);
	Print(p);

	//刪除元素3
	p= DelData(p,3);
	Print(p);

	//查找元素2的位置
	int add = findData(p,2);
	if (add == -1)
		printf("沒有該元素");
	else
		printf("元素2的位置爲:%d \n",add);

	//更改第3個位置上的數據爲7
	p = ChangeData(p,3,7);
	Print(p);

	system("pause");
	return 0;
}

 

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