Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.02.2009, 00:13   #1
Djaconda
Пользователь
 
Аватар для Djaconda
 
Регистрация: 02.09.2007
Сообщений: 26
По умолчанию Односвязный список. Что то сним не так

Вот написал код по созданию односвязного списка но что то он неправильно работает. А что понять не могу. Толь при добавлении нового элемента удаляет все предыдушие только вывод неправильно происходит. да и с удалением тоже что то неладное. Подскажите в чем ощибка.

Код:
#include <conio.h>
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>

const
	col1 = 1,
	col2 = 11,
	col3 = 11,
	col4 = 1,
	colblack = 15;

typedef char st[10];
st a[5] = {"Add", "Delete", "List", "Search", "Exit"};
int flag = 1, l, k;

struct Element
{
    int data;
    Element *next;
};

class List
{
    Element *pHead;
    Element *pPrev;
    int countElem;
public:
    List();
    ~List();

    void addToList(int data);
    void printList();
    void delAllList();
    void searchList(int index);
};

List::List()
{
    pHead = NULL;
    countElem = 0;
}

List::~List()
{
    delAllList();
}

void List::addToList(int data)
{
    Element *temp = new Element;
    if(pHead == NULL) {pHead = temp; cprintf("eeeeeeeeeee");}
    else pPrev->next = temp;
    temp->data = data;
    temp->next = NULL;
    pPrev = temp;
    countElem++;
}

void List::printList()
{
    cout <<endl <<"___Spisok___" <<endl;
    Element *pTemp = pHead;
    while(pTemp != NULL)
    {
	cout << pTemp->data<<endl;
	pTemp = pTemp->next;
    }
    cout << "Kolvo elementov " <<countElem << endl;
}

void List::searchList(int index)
{
    cout <<endl <<"___Search___"<<endl;
    Element *pTemp = pHead;
    int i = 0;
    while(pTemp != NULL)
    {
	i++;
	if (i==index) cout << "Znachenie iskomogo elementa " << pTemp->data <<endl;
	pTemp = pTemp->next;

    }
}


void List::delAllList()
{
    while(pHead != NULL)
    {
	Element *pTemp = pHead;
	pHead = pHead->next;
	delete pTemp;
    }
}

int ExitProts() {
	clrscr();
	window (27, 10, 52, 14);
	textbackground (4);
	exit('0');
	return 0;
}

int main () {
	window(1,1,80,25);
	clrscr();
	List MyList;
	while (1) {
		clrscr();
		flag=1; k=1;
		textbackground(8);
		window(1,1,80,1);
		clrscr();
		textcolor(14);
		gotoxy(2,1);
		cprintf("Menu");
		gotoxy(73,1);
		cprintf("ver 1.0");
		textbackground (11);
		textcolor(col2);
		window(2,23,79,23);
		cprintf("                                    rrrrrrrrrr                               ");
		window(1,2,80,2);
		textbackground(col1);
		textcolor(col2);
		clrscr();
		gotoxy(15,1);
		cprintf("%s",a[0]);
		gotoxy(25,1);
		cprintf("%s",a[1]);
		gotoxy(35,1);
		printf("%s",a[2]);
		gotoxy(45,1);
		printf("%s",a[3]);
		gotoxy(55,1);
		cprintf("%s",a[4]);
		textbackground(col3);
		textcolor(col4);
		gotoxy(5+10*(k),1);
		cprintf("%s",a[k-1]);
		while (flag == 1) {
		       window(1,2,80,2);
		       char button = getch();
		       if (button==0)  button = getch();
		       switch  (button) {
			    case 75 : { l=k; k--; break; }
			    case 77 : { l=k; k++; break; }
			    case 13 : { flag = 0; break; }
		       }
		       if (k<1) k=5;
		       if (k>5) k=1;
		       if (k!=l)
		       {
			    textbackground(col1);
			    textcolor(col2);
			    gotoxy(5+10*(l),1);
			    cprintf("%s",a[l-1]);
			    textbackground(col3);
			    textcolor(col4);
			    gotoxy(5+10*(k),1);
			    cprintf("%s",a[k-1]);
		       }
		}

		switch (k) {
		     case 1: {MyList.addToList(5); break;}
		     case 2: {MyList.delAllList(); break;}
		     case 3: {MyList.printList(); break;}
		     case 4: {MyList.searchList(3); break;}
		     case 5: {ExitProts(); break;}
		}
	}
	getch();
	return 0;
}
Djaconda вне форума Ответить с цитированием
Старый 28.02.2009, 08:21   #2
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Воспользуйтесь отладчиком и пройдите ключевые моменты программы по шагам, отслеживайте значения переменных (и адреса указателей) чтобы понять, где ошибка. Когда поймете где ошибка, устранить ее будет проще.
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Старый 28.02.2009, 20:04   #3
Djaconda
Пользователь
 
Аватар для Djaconda
 
Регистрация: 02.09.2007
Сообщений: 26
По умолчанию

помочь можешь? я устал уже искать вроде все норма а не работает.
Вложения
Тип файла: rar MenuSpisok.rar (1.1 Кб, 11 просмотров)
Djaconda вне форума Ответить с цитированием
Старый 28.02.2009, 20:15   #4
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Хм, а это что такое? Где тип переменных?
Код:
const
	col1 = 1,
	col2 = 11,
	col3 = 11,
	col4 = 1,
	colblack = 15;
MaTBeu вне форума Ответить с цитированием
Старый 01.03.2009, 14:55   #5
Djaconda
Пользователь
 
Аватар для Djaconda
 
Регистрация: 02.09.2007
Сообщений: 26
По умолчанию

Цитата:
Сообщение от MaTBeu Посмотреть сообщение
Хм, а это что такое? Где тип переменных?
Код:
const
	col1 = 1,
	col2 = 11,
	col3 = 11,
	col4 = 1,
	colblack = 15;
Это просто константы цветов для меню что бы не менять в раных местах а поменял в одном и все. Дело у списку не имеет никакое.
Djaconda вне форума Ответить с цитированием
Старый 01.03.2009, 15:46   #6
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Данный код выполняется вроде корректно
Код:
int main () {
	List MyList;
	MyList.addToList(1);
	MyList.printList();
	MyList.addToList(2);
	MyList.printList();
	MyList.addToList(3);
	MyList.printList();
	MyList.addToList(4);
	MyList.printList();
	MyList.addToList(5);
	MyList.printList();
	MyList.delAllList();
	MyList.printList();
	MyList.addToList(1);
	MyList.printList();
	
	getch();
	return 0;
}
Только при очистке списка счетчик количества элементов не сбрасывается.
Следовательно работа со списком корректно работает. Что-то с отображением вероятно намудрили
pu4koff вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Односвязный список. С++ Ozza Помощь студентам 1 06.02.2009 02:09
else ,что сним не так? addy100 Общие вопросы C/C++ 6 04.02.2009 11:17
Шаблонный односвязный список _ares_ Общие вопросы C/C++ 4 06.12.2008 21:35
Линейный односвязный список Absinth Помощь студентам 4 11.11.2008 20:29
Кольцевой односвязный список jukk Общие вопросы Delphi 3 22.12.2006 12:10