Другие языки программирования и технологии

C++ Двусвязные списки, работает не правильно программа

Всем привет! Нужна программа, которая будет создавать двунаправленный список с информационным полем char. Но в список нужно добавить численные значения 1,3,5 итд.. .Есть прога, но выводит абракодабру, подскажите знающие люди, в чем проблема, как изменить? ?
я как понял она только под integer работает, а при char с ума сходит.. .что и на что здесь изменить нужно? ?
сам плохо понимаю списки эти... (
вот прога моя: http://pastebin.com/1h5509h3
с уважением...
Всё очень плохо, с логикой, с освобождением памяти, с типами данных, с комментариями, с форматированием!

#include <stdlib.h>
#include <iostream>

using namespace std;

struct Node {
    char x;
    Node * Next, * Prev;
};

class List {
    Node * Head, * Tail;
public:
    List() : Head(NULL), Tail(NULL) { };
    ~List();
    void Show()const;
    void Add(char x);
};

int main () {
    List list;
    char ch;
    const size_t size = 4;

    for (size_t n = 0; n < size; n++) {
        cout << " symbol > ";
        cin >> ch;
        list.Add(ch);
    } cout << endl;

    list.Show();

    cin.get(); cin.get();
    return 0;
}

List::~List() {
    if (Head) {
        Node * temp = NULL;

        while (Head) {
            temp = Head;
            Head = Head->Next;
            delete temp;
            temp = NULL;
        }

        Tail = NULL;
    }
}

void List::Add(char x) {
    Node * temp = new Node;
    temp->Next = NULL;
    temp->x = x;

    if (Head == NULL) {    
        Tail = Head = temp;
        Tail->Prev = Head->Prev = Tail->Next = Head->Next = NULL;
    } else {
        Tail->Next = temp;
        temp->Prev = Tail;
        temp->Next = NULL;
        Tail = temp;
    }

    temp = NULL;
}

void List::Show()const {
    if (Tail != NULL) {
        Node * temp = Tail;

        do {
            cout << temp->x << ' ';
            temp = temp->Prev;
        } while (temp != NULL);
        cout << endl;

        temp = Head;

        while (temp != NULL) {
            cout << temp->x << ' ';
            temp = temp->Next;
        }
        cout << endl;

        temp = NULL;
    }
}
Медербек Жангелдиев
Медербек Жангелдиев
53 637
Лучший ответ
Не хочу вникать в программу, пока простое пояснение по типу char: char - это 1 байт, причем математическими функциями он воспринимается как число от -128 до 127, а функциями, работающими с символами - как символ с соответствующим кодом. Например,
cout << char( 'A'+1);
выведет символ B, поскольку код символа B на 1 больше кода символа A. Записи 'A' и char(65) на C/C++ идентичны!
А теперь посмотрим, что ты делаешь:
cout << temp->x << " "; //Выводить значение на экран
А выводишь ты.. . символ с кодом temp->x! Если хочешь выводить значение, делай
cout << int(temp->x) << " ";
или (строго)
cout << static_cast< int>(temp->x) << " ";