数据结构(链表的实现)

版权声明:欢迎读者转载,如果有问题请给与评论。 https://blog.csdn.net/qq_41848006/article/details/82026700

1.链表的实现:插入结点,想要动态分配内存,如果分配的内存为空,则内存分配失败。

2.序号查找:for循环查找,关键字查找:while循环

3.链表的缺点就是不管查找,删除都是的从头结点开始遍历。

4.如果数据项只有一个,则只用一个结构体,如果数据项有多个,则要定义两个结构体。

#include<iostream>
#include<string>
using namespace std;

struct Data {
	string key;
	string name;
	int age;
};

typedef struct Node {
	struct Data data;
	struct Node *next;
}LNode,*LinkList;
//建立单链表:头插法和尾插法
//分配内存空间 ,头指针为null
LinkList CreateList1(LinkList head, Data std)
{
	LinkList node;
	if (!(node = new LNode))
	{
		cout << "内存分配失败!" << endl;
		return 0;
	}
	else
	{
		node->data = std;
		node->next = head;
		head = node;
		return head;
	}
}

LinkList CreataList2(LinkList head, Data std)
{
	LinkList node, test;
	if (!(node = new LNode))
	{
		cout << "内存分配失败!" << endl;
		return 0;
	}
	else
	{
		node->data = std;
		node->next = NULL;
		if (head == NULL)
		{
			head = node;
			return head;
		}
		
		else
		{
			test = head;
			while ((test->next) != NULL)
			{
				test = test->next;
			}
			test->next = node;
			return head;

		}
	}
}

LinkList FindList1(LinkList head, int k)
{
	LinkList test;
	test = head;
	for (int i = 1; i < k&&test; ++i)
	{
		test = test->next;
	}
	return test;
}

LinkList FindList2(LinkList head,string name )  //以name为例
{
	LinkList test;
	test = head;
	while (test)
	{
		if (test->data.name == name)
		{
			return test;
		}
		test = test->next;
	}
	return NULL;
}

LinkList InsertList(LinkList head, int k, Data data)
{
	LinkList test,exam;
	if (!(test = new(LNode)))
	{
		cout << "分配内存失败!" << endl;
	}
	else
	{
		test->data = data;
		exam = FindList1(head, k - 1);
		if (exam)
		{
			test->next = exam->next;
			exam->next = test;
		}
		else
		{
			cout << "没有找到插入的位置!" << endl;
			delete test;
		}
	}
	return head;
}

LinkList DeleteList1(LinkList head, int k)
{
	LinkList a, b;
	a = FindList1(head, k - 1);
	b = FindList1(head, k);
	a->next = b->next;
	return head;
}

LinkList DeleteList2(LinkList head, string name)
{
	LinkList test, exam;
	test = FindList2(head, name);
	if (test)
		delete test;
	else
		return 0;

}

int LenList(LinkList head)
{
	LinkList test;
	int len=0;
	test = head;
	while (test)
	{
		++len;
		test = test->next;
	}return len;
}

void DisplayList(LinkList head)
{
	LinkList test;
	test = head;
	while (test)
	{
		cout << test->data.key <<"\t"<< test->data.name << "\t" << test->data.age << endl;
		test = test->next;
	}
}
int main()
{
	LinkList lis, head = NULL;
	Data data;
	string name;
	cout << "请先输入链表中的数据,格式为:学号,姓名,年龄(年龄为0时停止输入)" << endl;
	while (1)
	{
		cin >> data.key >> data.name >> data.age;
		if (data.age == 0)
		{
			break;
		}
		head =CreateList1(head, data);
	}
	DisplayList(head);
	//等等调用函数的操作,再不一一列举。
	
	
	system("pause");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_41848006/article/details/82026700