//---------------------------------------------------------------------------
[COLOR="SeaGreen"]#pragma hdrstop
#include <iostream>[/COLOR]
using namespace std;
//---------------------------------------------------------------------------
enum ETypeData {NUMBER, CHAR};
//---------------------------------------------------------------------------
struct SNode
{
SNode *next;
union
{
int num;
char ch;
} data;
ETypeData type;
};
//---------------------------------------------------------------------------
struct SList
{
SNode *head;
SNode *tail;
};
void InitList(SList &list);
void ListAddToHead(SList &list, int i);
void ListAddToTail(SList &list, char c);
void ListAdd(SList &list, char c);
bool ListIsEmpty(SList &list);
void ListDelete(SList &list);
void ListPrint(SList &list);
//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{
SList l;
InitList(l);
char c;
cout << "Input list: " << endl;
cout << "q - quit" << endl;
cin >> c;
while(c != 'q')
{
ListAdd(l, c);
cin >> c;
}
ListPrint(l);
ListDelete(l);
cin >> c;
return 0;
}
//---------------------------------------------------------------------------
void InitList(SList &list)
{
list.head = NULL;
list.tail = NULL;
}
//---------------------------------------------------------------------------
void ListAddToHead(SList &list, int i)
{
SNode * NewNode = new SNode;
NewNode->data.num = i;
NewNode->type = NUMBER;
NewNode->next = list.head;
list.head = NewNode;
if(list.tail == NULL)
list.tail = NewNode;
}
//---------------------------------------------------------------------------
void ListAddToTail(SList &list, char c)
{
SNode * NewNode = new SNode;
NewNode->data.ch = c;
NewNode->type = CHAR;
NewNode->next = NULL;
if(list.tail != NULL)
list.tail->next = NewNode;
list.tail = NewNode;
if(list.head == NULL)
list.head = NewNode;
}
//---------------------------------------------------------------------------
void ListAdd(SList &list, char c)
{
if(isdigit(c))
{
// Переводим код символа в число
int i = c - '0';
ListAddToHead(list, i);
}
else
{
ListAddToTail(list, c);
}
}
//---------------------------------------------------------------------------
bool ListIsEmpty(SList &list)
{
return !list.head;
}
//---------------------------------------------------------------------------
void ListDelete(SList &list)
{
while(!ListIsEmpty(list))
{
SNode *n = list.head;
list.head = list.head->next;
if(list.head == NULL)
list.tail = NULL;
delete n;
}
}
//---------------------------------------------------------------------------
void ListPrint(SList &list)
{
SNode *node = list.head;
cout << endl << "List:" << endl;
if(node == NULL)
cout << "List is empty." << endl;
while(node != NULL)
{
if(node->type == NUMBER)
cout << "NUMBER: " << node->data.num << endl;
if(node->type == CHAR)
cout << "CHAR: " << node->data.ch << endl;
node = node->next;
}
}
//---------------------------------------------------------------------------
[С++] Структуры
Получила странное задание...не могу в нем разобраться. Используя стркутуры, написать программу организации связного списка по следующему признаку: если введённый символ буква, то в конце списка добавляется узел, который содержит символ, иначе узел добавляется в начало списка и содержит цифру.
если проблема в этом то используйте поиск
много чего найдете :) - обсуждалось это не раз на форуме
понятненько, ща тогда полистаем странички
Я бы используя структуры так сделал. Мне кажеться препод проверяет не только знание структур, но и например использование union) и enum. жаль классов нет(
это означает?
Код:
#pragma hdrstop//???????
union я знаю что, а вот enum, чет не рассказывали и никогда не слышала
Код:
enum ETypeData {NUMBER, CHAR};//?????
Код:
#pragma argsused//?????
Код:
(int argc, char* argv[])//????
enum - перечисляемый тип
#pragma argused // директива компилятора показывающая, что программе будут переданы параметры
(int argc, char* argv[]) // собственно параметры командной строки
Спасибо!