栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

Windows c++ 链表读取数据模块

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Windows c++ 链表读取数据模块

链表增删改查+冒泡排序:


用一个链表存储这种模块头+条目的数据,
冒泡排序需要点想法

LinkList.h

#pragma once
#include 


struct Node
{
	BYTE bLength;
	BYTE bCopySize;
	WORD wId;
	WORD wSecSize;
	DWORD dwInfo;
	DWORD dwAddress0;
	DWORD dwAddress1;
	Node* next;
};
class LinkList
{
public:
	LinkList();
	~LinkList();

	Node* head;
	CFile readFile;
	CFile writeFile;
	char headSection[50];
	unsigned short quantity;

 	void ShowListHead();
	void ShowListBody();

	void Insert(Node* newNode, int location);
	int Find(int NodeID);
	void Delete(int NodeID);
	void Set(int NodeID, int i, char address[4]);
	void Sort();
	void Swap(Node* temp0, Node*temp1);
	void Save();
};


int main()
{
	LinkList list;
	list.ShowListHead();
	Node* newNode = new Node;
	newNode->next = NULL;
	list.Insert(newNode, 1);
	list.Delete(1);
	//char a[4] = { '0','0','0','0' };
	//list.Set(2, 0, a);
	list.Sort();
	list.ShowListBody();
	list.Save();

	return 0;
}

LinkList.cpp

#include "LinkList.h"
#include 
#include 


LinkList::LinkList()
{
	readFile.Open(_T("E:\desktop\01.rpm"), CFile::modeRead);
	readFile.Read(headSection, 50);
	quantity = short(headSection[48]) + short(headSection[49]) * pow(16, 2);

	head = new Node;
	head->next = NULL;
	Node* temp = head;

	for (int i = 0;i < quantity;i++)
	{

		char buffer[18];
		readFile.Read(buffer, 18);
		Node* newNode = new Node;

		newNode->bLength = *(BYTE*)(buffer);
		newNode->bCopySize = *(BYTE*)(buffer + 1);
		newNode->wId = *(WORD*)(buffer + 2);
		newNode->wSecSize = *(WORD*)(buffer + 4);
		newNode->dwInfo = *(DWORD*)(buffer + 6);
		newNode->dwAddress0 = *(DWORD*)(buffer + 10);
		newNode->dwAddress1 = *(DWORD*)(buffer + 14);

		newNode->next = NULL;
		temp->next = newNode;
		temp = temp->next;

	}
	readFile.Close();
}

LinkList::~LinkList()
{
	Node* temp = head;
	for (int i = 0; i < quantity;i++)
	{
		Node* newNode = temp->next;
		delete temp;
		temp = newNode;
	}
	delete temp;
}

void LinkList::ShowListHead()
{
	std::cout << "头部标识为:";
	for (int i = 0;i < 4;i++) 
	{
		std::cout << headSection[i];
	}
	std::cout << std::endl << "校验值为:";

	for (int i = 12;i < 16;i++) 
	{
		std::cout << headSection[i];
	}
	std::cout << std::endl << "版本信息为:";

	for (int i = 16;i < 24;i++) 
	{
		std::cout << headSection[i];
	}
	std::cout << std::endl << "列表结构起始位置为:";

	for (int i = 6;i < 8;i++) 
	{
		std::cout << headSection[i];
	}
	std::cout << std::endl << std::endl;
}

void LinkList::ShowListBody()
{
	Node* temp = head->next;
	int i = 1;

	while (temp->next != NULL)
	{
		std::cout << "条目长度为:" << temp->bLength << std::endl;

		std::cout << "备份个数为:" << temp->bCopySize << std::endl;

		std::cout << "模块ID为:" << temp->wId << std::endl;

		std::cout << "模块扇区大小为:" << temp->wSecSize << std::endl;

		std::cout << "版本信息为:" << temp->dwInfo << std::endl;

		std::cout << "备份0地址为:" << temp->dwAddress0 << std::endl;

		std::cout << "备份1地址为:" << temp->dwAddress1 << std::endl;

		std::cout << "条目次序为:" << i++ << std::endl << std::endl;
		
		temp = temp->next;
	}
}

void LinkList::Insert(Node* newNode, int location)
{

	Node* temp = head;
	for (int i = 1;i < location;i++)
	{
		temp = temp->next;
	}

	newNode->next = temp->next;
	temp->next = newNode;

	quantity++;
}

int LinkList::Find(int NodeID)
{
	Node* temp = head;
	int turnNum = 1;

	while (temp->next != NULL)
	{
		temp = temp->next;
		if (temp->wId == NodeID)
		{
			return turnNum;
		}

		turnNum++;
	}

	return -1;
}

void LinkList::Delete(int NodeID)
{
	int n = Find(NodeID);
	if (n == -1)
	{
		std::cout << "没有找到该ID对应的条目" << std::endl;
		return;
	}

	Node* temp = head;
	for (int i = 0;i < n - 1;i++)
	{
		temp = temp->next;
	}

	Node* node = temp->next;

	if (n < quantity)
	{
		temp->next = temp->next->next;
	}
	else
	{
		temp->next = NULL;
	}

	delete node;
	quantity--;
}

void LinkList::Set(int NodeID, int i, char address[4])
{
	Node* temp = head;
	while (temp->next != NULL)
	{
		temp = temp->next;
		if (temp->wId == NodeID)
		{

			if (i == 0)
			{
				DWORD add = *(DWORD*)(address);
				temp->dwAddress0 = add;
			}

			else if (i == 1)
			{
				DWORD add = *(DWORD*)(address);
				temp->dwAddress1 = add;
			}

			return;
		}
	}

	std::cout << "没有找到该ID对应的条目" << std::endl;

}

void LinkList::Sort()
{
	Node* temp0;
	Node* temp1;
	Node* end = NULL;

	while (head->next != end)
	{
		temp0 = head;
		temp1 = temp0->next;

		while (temp1->next != end)
		{

			if (temp1->wId > temp1->next->wId)
			{
				temp0->next = temp1->next;
				temp1->next = temp0->next->next;
				temp0->next->next = temp1;
				temp1 = temp0->next;
			}

			temp0 = temp0->next;
			temp1 = temp1->next;
		}

		end = temp1;
	}
}

void LinkList::Save()
{

	writeFile.Open(_T("E:\desktop\abc\01.rpm"), CFile::modeWrite | CFile::modeCreate);
	writeFile.Write(headSection, 50);

	Node* node = head->next;
	while (node->next != NULL)
	{
		writeFile.Write(node, 18);

		node = node->next;
	}

}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1001743.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号