===== リスト構造の生成と挿入と削除 =====
リスト作ってつないで挿入して削除
#include
namespace
{
const int DATASIZE = 5;//生成するデータ数
}
struct Point
{
int x;
int y;
};
struct myList
{
Point pos;
int num; //データ1個作ったら勝手に増えてほしい
myList* pNext;
};
void InsertData(myList *head, int num, myList* data) //numの後ろにデータdataを挿入
{
myList* p = head;
while (p != nullptr)
{
if (p->num == num)
{
myList* tmp = p->pNext;
p->pNext = data;
data->pNext = tmp;
break;
}
else
p = p->pNext;
}
return;
}
void InsertData(myList* head, int num, int x, int y) //numの後ろにデータdataを挿入
{
}
myList* makeData(int x, int y)
{
static int numData = 0;
myList* pData = new myList;
pData->pos = { x, y };
pData->num = numData;
pData->pNext = nullptr;
numData++;
return(pData);
}
void PrintList(myList* head)
{
myList* p = head;
while (p != nullptr)
{
std::cout << p->num << ": (" << p->pos.x << ", " << p->pos.y << ")" << std::endl;
p = p->pNext;
}
}
int main()
{
myList* head = nullptr;
myList* preP = nullptr;
//myList* head = makeData(0, 0);
for (int i = 0; i < DATASIZE; i++)
{
Point tmpP{ rand() % 10, rand() % 10 };
myList* p = makeData(tmpP.x, tmpP.y);
if (p->num == 0)
head = p;
else
preP->pNext = p;
preP = p;
}
std::cout << "挿入前" << std::endl;
PrintList(head);
myList* newData = makeData(-1, -1);
InsertData(head, 2, newData);
std::cout << "挿入後" << std::endl;
PrintList(head);
return 0;
}
===== 追加削除できるやつ(メモリも開放するよ) =====
リストの追加と削除とメモリ消去
#include
namespace
{
const int DATASIZE = 5;//生成するデータ数
}
struct Point
{
int x;
int y;
};
struct myList
{
Point pos;
int num; //データ1個作ったら勝手に増えてほしい
myList* pNext;
};
//関数のプロトタイプ宣言
void InsertData(myList* head, int num, myList* data);
void InsertData(myList* head, int num, int x, int y);
void DeleteData(myList* head, int num);
void DelateData(myList* head, int x, int y);
myList* makeData(int x, int y);
void PrintList(myList* head);
//関数の定義たち
void InsertData(myList *head, int num, myList* data) //numの後ろにデータdataを挿入
{
myList* p = head;
while (p != nullptr)
{
if (p->num == num)
{
myList* tmp = p->pNext;
p->pNext = data;
data->pNext = tmp;
break;
}
else
p = p->pNext;
}
return;
}
void InsertData(myList* head, int num, int x, int y) //numの後ろにデータdataを挿入
{
myList* p = head;
while (p != nullptr)
{
if (p->num == num)
{
myList* data = makeData(x, y);
myList* tmp = p->pNext;
p->pNext = data;
data->pNext = tmp;
break;
}
else
p = p->pNext;
}
return;
}
//データが見つかれば削除
void DeleteData(myList* head, int num)
{
myList* p = head;
myList* pre = nullptr;
myList* delData = nullptr;
while (p != nullptr)
{
if (p->num == num)
{
if (p == head)
{
delData = head;
*head = *(p->pNext);
}
else
{
delData = p;
pre->pNext = p->pNext;
}
break;
}
else
pre = p;
p = p->pNext;
}
delete delData;
return;
}
//データが見つかれば削除
void DelateData(myList* head, int x, int y)
{
}
myList* makeData(int x, int y)
{
static int numData = 0;
myList* pData = new myList;
pData->pos = { x, y };
pData->num = numData;
pData->pNext = nullptr;
numData++;
return(pData);
}
void PrintList(myList* head)
{
myList* p = head;
while (p != nullptr)
{
std::cout << p->num << ": (" << p->pos.x << ", " << p->pos.y << ")" << std::endl;
p = p->pNext;
}
}
int main()
{
myList* head = nullptr;
myList* preP = nullptr;
//myList* head = makeData(0, 0);
for (int i = 0; i < DATASIZE; i++)
{
Point tmpP{ rand() % 10, rand() % 10 };
myList* p = makeData(tmpP.x, tmpP.y);
if (p->num == 0)
head = p;
else
preP->pNext = p;
preP = p;
}
std::cout << "挿入前" << std::endl;
PrintList(head);
myList* newData = makeData(-1, -1);
InsertData(head, 2, newData);
std::cout << "挿入後" << std::endl;
PrintList(head);
std::cout << "削除後" << std::endl;
DeleteData(head, 3);
PrintList(head);
int N = 6;
while (true)
{
myList* newData = makeData(-1, -1);
InsertData(head, 2, newData);
DeleteData(head, N);
N++;
}
return 0;
}