1

Тема: Доможіть хто може з динамічним списком))

  • Як переробити цю програму щоб в стеку і черзі не були цифри а напрклад імена людей

// Kursova13.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include <iostream>
#include <stdio.h>
using namespace std;
struct mol
{
int inf;
mol *next;
};
void list(mol *);
void dellast(mol *);
void delkey(mol *);
void addend(mol *);
mol *addstart(mol *);
void addtoorder(mol *);
void addkey(mol *);
void main()
{
mol *q, *n, *p, *s, *a;
n = new mol;
q = n;
//Очередь
for (int i = 1; i <= 10; i++)
{
q->inf = i;
p = new mol;
q->next = p;
a = q;
q = p;
}
a->next = NULL;
//----------------------------------------------------------
cout << "Ochered': ";
list(n);
/*p = n;
while (p != NULL)
{
cout << p->inf << ' ';
p = p->next;
}*/
cout << "\n\n\n";
//Стек
q = new mol;
q->inf = 1;
q->next = NULL;
for (int i = 2; i <= 10; i++)
{
p = new mol;
p->inf = i;
p->next = q;
q = p;
}
s = p;
//----------------------------------------------------------
//----------------------------------------------------------
cout << "Steck: ";
list(s);
//----------------------------------------------------------
//Функции
cout << "\n\nOchered'";
dellast(n); 
list(n);
cout << "\n\nSteck";
dellast(s); 
list(s);
cout << "\n\nOchered'";
delkey(n);
list(n);
cout << "\n\nSteck";
delkey(s);
list(s);
cout << "\n\nOchered'";
addend(n);
list(n);
cout << "\n\nSteck";
addend(s);
list(s);
cout << "\n\nOchered'";
n=addstart(n);
list(n);
cout << "\n\nSteck";
s = addstart(s);
list(s);
cout << "\n\nOchered'";
addtoorder(n);
list(n);
cout << "\n\nOchered'";
addkey(n);
list(n);
cout << "\n\nSteck";
addkey(s);
list(s);


int e;
cout << "\nEnd? (y=1/n=0):";
cin >> e;
if (e == 1)
{
cout << "Nope";
for (int i = 0; i < 100; i++)
cout << "xa-xa-xa ";
}
else
{
cout << "Ok";
}
}

void list(mol *p)
{
while (p != NULL)
{
cout << p->inf << ' ';
p = p->next;
}
}
void dellast(mol *p)
{
cout << "\nDEL LAST\n";
while (p->next->next != NULL)
p = p->next;
p->next = NULL;
}
void delkey(mol *p)
{
cout << "\nDEL KEY";
int x;
cout << "\nX="; cin >> x;
while (p->next->inf != x)
p = p->next;
p->next = p->next->next;
}
void addend(mol * p)
{
cout << "\nADD END";
while (p->next != NULL)
p = p->next;
mol *q = new mol;
cout << "\nINF=";
cin >> q->inf;
p->next = q;
q->next = NULL;
}

void addtoorder(mol *p)
{
cout << "\nADD to ORDER";
int x;
cout << "\nX="; cin >> x;
while (x > p->inf && p->next!=NULL)
p = p->next;
mol *q = new mol;
q->next = p->next;
p->next = q;
q->inf = x;
}

mol *addstart(mol *p)
{
cout << "\nADD to Start";
mol *q = new mol;
int x;
cout << "\nX=";
cin >> x;
q->inf = x;
q->next = p;
return q;
}

void addkey(mol *p)
{
cout<<"\nADD KEY\n";
int x;
cout << "\nWhere X=";
cin>>x;
while (p->next->inf!=x && p->next!=NULL)
{
p=p->next;
}
mol * q= new mol;
q->next=p->next;
p->next=q;
cout<<"What:";
cin>>q->inf;
}

2

Re: Доможіть хто може з динамічним списком))

Варіант 1, довгий і дурний.
10-й рядок int на char*, і там де присвоєння, присвоювати імена.

Варіант 2, швидкий і теж дурний.
Тупо створити масив імен спочатку і вважати що inf списку це номер елементу в масиві, і потім після всіх операцій, назад вкидувати.

Варіант 3, довгий але правильний.
Використовувати свій код і таки розібратись як працює список, черга і що там ще.

x
Подякували: RomeK=), yarko, leofun013

3 Востаннє редагувалося yarko (23.03.2015 10:35:58)

Re: Доможіть хто може з динамічним списком))

І використовувати відступи. Читати код в такому вигляді (все притиснуто до лівого краю) мягко кажучи неприємно

Qt 5.4.0
Подякували: leofun011