В этой программе мы обсудим, как реализовать односвязный список на языке C ++.
#include ‹iostream›
используя пространство имен std;
класс Node
{
общественность:
данные int;
Узел * следующий;
};
Узел * START = NULL;
void push (int new_data) {
Узел * new_node = новый узел ();
новый_узел- ›данные = новые_данные;
new_node- ›next = START;
СТАРТ = новый_узел;
}
void append (int new_data) {
Узел * cur = START;
Узел * new_node = новый узел ();
новый_узел- ›данные = новые_данные;
new_node- ›next = NULL;
while (текущий> следующий! = NULL) {
cur - ›следующий;
}
текущий ›следующий = новый_узел;
}
void insertAfterNode (int position, int new_data) {
Узел * cur = START, * new_node = new Node (), * temp;
новый_узел- ›данные = новые_данные;
if (position == 1) {
temp = текущий ›следующий;
текущий ›следующий = новый_узел;
new_node- ›next = temp;
} еще {
for (int i = 2; i ‹= position; i ++)
cur = текущий ›следующий;
temp = cur - ›следующий;
текущий ›следующий = новый_узел;
new_node- ›next = temp;
}
}
void deleteByValue (int value) {
Узел * cur = START, * prev, * temp;
while (cur - ›data! = value) {
prev = cur;
cur = текущий ›следующий;
}
temp = cur - ›следующий;
бесплатно (cur);
предыдущая ›следующая = темп;
cout ‹---------------- «Узел удален успешно» ‹< endl;
}
void deleteNode () {
Узел * temp;
если (START == NULL)
cout ‹---------------- «Список пуст…» ‹* endl;
еще{
temp = START - ›далее;
бесплатно (СТАРТ);
СТАРТ = темп;
}
cout ‹---------------- «Узел удален с начала» ‹< endl;
}
void deleteNodeAtEnd () {
Узел * cur = START, * prev;
если (START == NULL)
cout ‹---------------- «Список пуст…» ‹* endl;
еще{
while (cur - ›next! = NULL) {
prev = cur;
cur = текущий ›следующий;
}
предыдущая ›следующая = NULL;
бесплатно (cur);
}
cout ‹---------------- «Узел удален с конца» ‹< endl;
}
пустой дисплей ()
{
Узел * trav = START;
если (START == NULL)
cout ‹---------------- «Список пуст…»;
еще {
while (trav! = NULL) {
cout ‹-----------------
trav = trav- ›следующий;
}
cout ‹---------------- «NULL» ‹< endl;
}
}
int main ()
{
cout ‹
cout ‹---------------- «Поместить 90 в список»;
толкать (90);
cout ‹---------------- endl ‹
добавить (100);
cout ‹---------------- «Переместить 80 в список» ‹< endl;
толкать (80);
cout ‹---------------- «Нажать 110 после 3-го узла» ‹< endl;
insertAfterNode (3,110);
cout ‹* «Список отображения» ‹* endl;
отображать();
cout ‹
deleteNode ();
cout ‹* «Список отображения» ‹* endl;
отображать();
cout ‹
deleteNodeAtEnd ();
cout ‹* «Список отображения» ‹* endl;
отображать();
cout ‹---------------- «Удаление узла со значением 100» ‹< endl;
deleteByValue (100);
cout ‹* «Список отображения» ‹* endl;
отображать();
возврат 0;
}
Спасибо.