欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

链表

程序员文章站 2022-03-11 21:42:25
...
#include <iostream>
struct STU
{
	char name[32];
	int id;
};

#define DATA STU*
struct NODE
{
	DATA data;
	NODE* next;
};

class LinkList
{
public:

	NODE* head;//表头
	int len;//长度

	void Create()
	{
		head = (NODE*)malloc(sizeof(NODE));
		head->next = 0;	
		len = 0;
	}
	bool Insert(int pos, DATA data)
	{
		if (pos < 0 || pos > len)
			return false;
		NODE* n = (NODE*)malloc(sizeof(NODE));
		n->data = data;

		NODE* p = head;
		for (int i = 0;i < pos; ++i)
			p = p->next;
		n->next = p->next;
		p->next = n;
		len++;
		return true;
	}
	bool Erase(int pos)
	{
		if (pos < 0 || pos > len-1)
			return false;
		NODE* p = head;
		for (int i = 0;i < pos; ++i)
			p = p->next;
		//p  p->next  p->next->next
		NODE* nn = p->next->next;
		free(p->next);
		p->next = nn;
		len--;
		return true;
	}
	int Len()
	{
		return len;
	}
	DATA* Get(int pos)
	{
		if (pos < 0 || pos > len-1)
			return 0;
		NODE* p = head->next;
		for (int i = 0;i < pos; ++i)
			p = p->next;
		return &p->data;
	}
	void Clear()
	{
		NODE* p = head->next;
		while (p)
		{
			NODE* n = p->next;
			free(p);
			p = n;
		}
		head->next = 0;
		len = 0;
	}
	void Destroy()
	{
		Clear();
		free(head);
	}
};


void main()
{
	LinkList s;
	s.Create();

	STU* stu = (STU*)malloc(sizeof(STU));
	strcpy(stu->name, "abc");
	stu->id = 1;

	s.Insert(0, stu);

	stu = (STU*)malloc(sizeof(STU));
	strcpy(stu->name, "DEF");
	stu->id = 2;	
	s.Insert(1, stu);

	for (int i = 0;i < s.Len(); ++i)
	{
		//数据如果是STU   返回的是STU* q;    *q  
		//数据如果是STU*   返回的是STU** q;   *q
		STU** q = s.Get(i);
		std::cout<< (*q)->name <<", " <<(*q)->id <<"\n";
	}

	//因为存的数据是开了堆的,所以在表销毁之前,应该
	//把数据开的堆内存释放
	for (int i = 0;i < s.Len(); ++i)
	{
		STU* q = *s.Get(i);
		free(q);
	}

	s.Destroy();//销毁
}

 

相关标签: 链表

上一篇: mybatis的多条件查询

下一篇: Arrays