Linked List
29923 ワード
DLL → head, tail/prv, nxt
1. Single Linked List #include <iostream>
#define MAX_NODE 10002
using namespace std;
typedef class c_node
{
public :
int data;
class c_node *nxt;
class c_node *get_new_node(int new_data)
{
data = new_data;
nxt = nullptr;
return (this);
}
} t_node;
t_node g_mem_pool[MAX_NODE];
t_node *g_head;
int g_node_cnt;
void print_lst(void);
void init_lst(void)
{
g_node_cnt = 0;
g_head = g_mem_pool[g_node_cnt++].get_new_node(-1); // dummy
}
void lst_add_front(int data)
{
t_node *new_node;
new_node = g_mem_pool[g_node_cnt++].get_new_node(data);
new_node->nxt = g_head->nxt;
g_head->nxt = new_node;
}
void lst_add_back(int data)
{
t_node *cur;
t_node *new_node;
cur = g_head;
while (cur->nxt)
cur = cur->nxt;
new_node = g_mem_pool[g_node_cnt++].get_new_node(data);
cur->nxt = new_node;
}
void lst_add_by_idx(int data, int idx)
{
t_node *cur;
t_node *new_node;
cur = g_head;
while (--idx && cur->nxt)
cur = cur->nxt;
new_node = g_mem_pool[g_node_cnt++].get_new_node(data);
new_node->nxt = cur->nxt;
cur->nxt = new_node;
}
void lst_rm_by_data(int data)
{
t_node *cur, *trail;
trail = cur = g_head;
while (cur)
{
if (cur->data == data)
{
trail->nxt = cur->nxt;
return ;
}
trail = cur;
cur = cur->nxt;
}
}
int get_lst(int output[MAX_NODE])
{
t_node *cur;
int cnt;
cur = g_head->nxt;
cnt = 0;
while (cur)
{
output[cnt] = cur->data;
++cnt;
cur = cur->nxt;
}
return (cnt);
}
void print_lst(void)
{
t_node *cur;
cur = g_head->nxt;
cout << "lst: ";
while (cur->nxt)
{
cout << cur->data << " ";
cur = cur->nxt;
}
cout << endl;
}
2. Double Linked List #include <iostream>
#define MAX_NODE 10002
using namespace std;
typedef class c_node
{
public :
int data;
class c_node *prv;
class c_node *nxt;
class c_node *get_new_node(int new_data)
{
data = new_data;
prv = nxt = nullptr;
return (this);
}
} t_node;
t_node g_mem_pool[MAX_NODE];
t_node *g_head;
t_node *g_tail;
int g_node_cnt;
void print_lst(void);
void init_lst(void)
{
g_node_cnt = 0;
g_head = g_mem_pool[g_node_cnt++].get_new_node(-1);
g_tail = g_mem_pool[g_node_cnt++].get_new_node(-1);
g_head->nxt = g_tail;
g_tail->prv = g_head;
}
void lst_add_front(int data)
{
t_node *new_node;
new_node = g_mem_pool[g_node_cnt++].get_new_node(data);
new_node->prv = g_head;
new_node->nxt = g_head->nxt;
g_head->nxt->prv = new_node;
g_head->nxt = new_node;
}
void lst_add_back(int data)
{
t_node *new_node;
new_node = g_mem_pool[g_node_cnt++].get_new_node(data);
new_node->prv = g_tail->prv;
new_node->nxt = g_tail;
g_tail->prv->nxt = new_node;
g_tail->prv = new_node;
}
void lst_add_by_idx(int data, int idx)
{
t_node *cur;
t_node *new_node;
cur = g_head;
while (--idx && cur->nxt)
cur = cur->nxt;
new_node = g_mem_pool[g_node_cnt++].get_new_node(data);
new_node->prv = cur;
new_node->nxt = cur->nxt;
cur->nxt->prv = new_node;
cur->nxt = new_node;
}
int get_node_idx(int data)
{
t_node *cur;
int cnt;
cur = g_head->nxt;
cnt = 1;
while (cur)
{
if (cur->data == data)
return (cnt);
++cnt;
cur = cur->nxt;
}
return (-1);
}
void lst_rm_by_data(int data)
{
t_node *cur, *trail;
cur = g_head;
while (cur)
{
if (cur->data == data)
{
trail->nxt = cur->nxt;
cur->nxt->prv = trail;
return ;
}
trail = cur;
cur = cur->nxt;
}
}
int get_lst(int output[MAX_NODE])
{
t_node *cur;
int cnt;
cur = g_head->nxt;
cnt = 0;
while (cur->nxt)
{
output[cnt] = cur->data;
++cnt;
cur = cur->nxt;
}
return (cnt);
}
int get_reversed_lst(int output[MAX_NODE])
{
t_node *cur;
int cnt;
cur = g_tail->prv;
cnt = 0;
while (cur->prv)
{
output[cnt] = cur->data;
++cnt;
cur = cur->prv;
}
return (cnt);
}
void print_lst(void)
{
t_node *cur;
cur = g_head->nxt;
cout << "lst: ";
while (cur->nxt)
{
cout << cur->data << " ";
cur = cur->nxt;
}
cout << endl;
}
Reference
この問題について(Linked List), 我々は、より多くの情報をここで見つけました
https://velog.io/@24siefil/Linked-List-p8jpt70d
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
#include <iostream>
#define MAX_NODE 10002
using namespace std;
typedef class c_node
{
public :
int data;
class c_node *nxt;
class c_node *get_new_node(int new_data)
{
data = new_data;
nxt = nullptr;
return (this);
}
} t_node;
t_node g_mem_pool[MAX_NODE];
t_node *g_head;
int g_node_cnt;
void print_lst(void);
void init_lst(void)
{
g_node_cnt = 0;
g_head = g_mem_pool[g_node_cnt++].get_new_node(-1); // dummy
}
void lst_add_front(int data)
{
t_node *new_node;
new_node = g_mem_pool[g_node_cnt++].get_new_node(data);
new_node->nxt = g_head->nxt;
g_head->nxt = new_node;
}
void lst_add_back(int data)
{
t_node *cur;
t_node *new_node;
cur = g_head;
while (cur->nxt)
cur = cur->nxt;
new_node = g_mem_pool[g_node_cnt++].get_new_node(data);
cur->nxt = new_node;
}
void lst_add_by_idx(int data, int idx)
{
t_node *cur;
t_node *new_node;
cur = g_head;
while (--idx && cur->nxt)
cur = cur->nxt;
new_node = g_mem_pool[g_node_cnt++].get_new_node(data);
new_node->nxt = cur->nxt;
cur->nxt = new_node;
}
void lst_rm_by_data(int data)
{
t_node *cur, *trail;
trail = cur = g_head;
while (cur)
{
if (cur->data == data)
{
trail->nxt = cur->nxt;
return ;
}
trail = cur;
cur = cur->nxt;
}
}
int get_lst(int output[MAX_NODE])
{
t_node *cur;
int cnt;
cur = g_head->nxt;
cnt = 0;
while (cur)
{
output[cnt] = cur->data;
++cnt;
cur = cur->nxt;
}
return (cnt);
}
void print_lst(void)
{
t_node *cur;
cur = g_head->nxt;
cout << "lst: ";
while (cur->nxt)
{
cout << cur->data << " ";
cur = cur->nxt;
}
cout << endl;
}
#include <iostream>
#define MAX_NODE 10002
using namespace std;
typedef class c_node
{
public :
int data;
class c_node *prv;
class c_node *nxt;
class c_node *get_new_node(int new_data)
{
data = new_data;
prv = nxt = nullptr;
return (this);
}
} t_node;
t_node g_mem_pool[MAX_NODE];
t_node *g_head;
t_node *g_tail;
int g_node_cnt;
void print_lst(void);
void init_lst(void)
{
g_node_cnt = 0;
g_head = g_mem_pool[g_node_cnt++].get_new_node(-1);
g_tail = g_mem_pool[g_node_cnt++].get_new_node(-1);
g_head->nxt = g_tail;
g_tail->prv = g_head;
}
void lst_add_front(int data)
{
t_node *new_node;
new_node = g_mem_pool[g_node_cnt++].get_new_node(data);
new_node->prv = g_head;
new_node->nxt = g_head->nxt;
g_head->nxt->prv = new_node;
g_head->nxt = new_node;
}
void lst_add_back(int data)
{
t_node *new_node;
new_node = g_mem_pool[g_node_cnt++].get_new_node(data);
new_node->prv = g_tail->prv;
new_node->nxt = g_tail;
g_tail->prv->nxt = new_node;
g_tail->prv = new_node;
}
void lst_add_by_idx(int data, int idx)
{
t_node *cur;
t_node *new_node;
cur = g_head;
while (--idx && cur->nxt)
cur = cur->nxt;
new_node = g_mem_pool[g_node_cnt++].get_new_node(data);
new_node->prv = cur;
new_node->nxt = cur->nxt;
cur->nxt->prv = new_node;
cur->nxt = new_node;
}
int get_node_idx(int data)
{
t_node *cur;
int cnt;
cur = g_head->nxt;
cnt = 1;
while (cur)
{
if (cur->data == data)
return (cnt);
++cnt;
cur = cur->nxt;
}
return (-1);
}
void lst_rm_by_data(int data)
{
t_node *cur, *trail;
cur = g_head;
while (cur)
{
if (cur->data == data)
{
trail->nxt = cur->nxt;
cur->nxt->prv = trail;
return ;
}
trail = cur;
cur = cur->nxt;
}
}
int get_lst(int output[MAX_NODE])
{
t_node *cur;
int cnt;
cur = g_head->nxt;
cnt = 0;
while (cur->nxt)
{
output[cnt] = cur->data;
++cnt;
cur = cur->nxt;
}
return (cnt);
}
int get_reversed_lst(int output[MAX_NODE])
{
t_node *cur;
int cnt;
cur = g_tail->prv;
cnt = 0;
while (cur->prv)
{
output[cnt] = cur->data;
++cnt;
cur = cur->prv;
}
return (cnt);
}
void print_lst(void)
{
t_node *cur;
cur = g_head->nxt;
cout << "lst: ";
while (cur->nxt)
{
cout << cur->data << " ";
cur = cur->nxt;
}
cout << endl;
}
Reference
この問題について(Linked List), 我々は、より多くの情報をここで見つけました https://velog.io/@24siefil/Linked-List-p8jpt70dテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol