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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.01.2013, 22:12   #1
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию Стек

привет, проблема: сравнение элементов стека происходит неправильно...
В чем же ошибка?

Код:
#include <iostream>//главный заголовочный файл для операторов ввода/вывода
#include <stdlib.h>//заголовочный файл для функции выделения памяти 

/*переменные*/
using namespace std;//использование имен std стандартного пространства для операторов ввода/вывода
int i;//объявление и инициализация целочисленной переменной для ввода элементов
int N;
/**/

/*стек*/
struct List {
	char a[100];//информационное поле
	List *Next;//указатель на следующий адрес структуры List (адресное поле)
};
/**/

/*указатели для первого стека*/
List *Head;//указатель на вершину(первый элемент стека) стека
List *P;//указатель на текущий элемент
/**/

//указатели для второго стека
List *Top;//указатель на вершину стека
List *Current;//указатель на текущий элемент


//указатели для первого вспом. стека
List *First;
List *New;

//
List *B;//указатель наа текущий элемент второго вспом. стека
List *Header;


int Comparison(List *H1, List *H2, List *Elem1, List *Elem2) {
	int state=1;
	int iter=0;
	Elem1=H1;
	Elem2=H2;
	while (Elem1!=NULL && Elem2!=NULL) {
		while ((Elem1->a[iter]==Elem1->a[iter]) && (iter<=strlen(Elem1->a) && iter<=strlen(Elem1->a))) {
			iter++;
			cout << "e: " << Elem1->a[iter] << "\n";
			cout << "e2: " << Elem2->a[iter] << "\n";
			if (Elem1->a[iter]!=Elem2->a[iter]) {
				state=0;
				return state;
		}
	}
	    Elem1=Elem1->Next;
		Elem2=Elem2->Next;
	}
	return state;
	}

void FreeMemory(List *H, List *Elem) {
	while (H!=NULL) 
	{
		Elem=H;
		H=H->Next;
		free(Elem);
	}
}


void main() {
	cout << "Enter the amount of the digits of the two stacks: ";
	cin >> N;
	while (N<=0 || N>100) {
	cout << "Wrong amount. Re-enter: ";
	cin >> N;
    }
	Head=NULL;//объявление пустого списка
	fflush(stdin);
	for (i=0; i<N; i++) {
	    P=(List*)malloc(sizeof(List));//выделение памяти под текущий элемент
	    cout << "The " << i+1 << " element: ";
	    gets(P->a);//заполнение информационного поля
		fflush(stdin);
	    P->Next=Head;//переопределение указателя на следующий элемент
	    Head=P;//переопределение указателя на голову
	}
	cout << "Enter " << N << " elements of the 2nd stack: " << "\n";
	Top=NULL;
	//блок ввода элементов второго стека
	for (i=0; i<N; i++) {
		Current=(List*)malloc(sizeof(List));
		cout << "The " << i+1 << " element: ";
		fflush(stdin);
		gets(Current->a);
		Current->Next=Top;
		Top=Current;
	}
	/**/

	//добавление э-тов первого стека
	First=NULL;
	P=Head;
	while (P!=NULL) {
		New=(List*)malloc(sizeof(List));
		strcpy(New->a, P->a);
		P=P->Next;
		New->Next=First;
		First=New;
	}
	//добавление э-тов второго стека
	Header=NULL;
	Current=Top;
	while (Current!=NULL) {
		B=(List*)malloc(sizeof(List));
		strcpy(B->a, Current->a);
		Current=Current->Next;
		B->Next=Header;
		Header=B;
	}

	//блок сравнения
	if (Comparison(First, Header, New, B)==1) 
		cout << "Stacks are alike!" << "\n";
	else cout << "Stacks aren't alike!" << "\n";

	//блок освобождения памяти для стеков
	FreeMemory(Head, P);
	FreeMemory(Top, Current);
	FreeMemory(Header, B);
	FreeMemory(First, New);
system("pause");//задержка времени выполнения программы
}
Igor95 вне форума Ответить с цитированием
Старый 16.01.2013, 22:39   #2
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

А Вы объясните по-русски, при каких условиях элементы List считаются равными. И почему сравниваются два элемента между собой, а функция требует четыре?
EUGY вне форума Ответить с цитированием
Старый 16.01.2013, 22:50   #3
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

итак, есть строка, сравниваем элементы (указатель на текущий элемент первого стека)->a[iter] и (указатель на текущий элемент второго стека)->a[iter], если равны то, переходим к следующим (указатель на текущий элемент первого стека) и (указатель на текущий элемент второго стека)... т.е Elem1=Elem1->Next...

ну конечно 4 функция требует, а сколько же их должно быть если сравниваются элемент двух стеков...
Igor95 вне форума Ответить с цитированием
Старый 16.01.2013, 22:56   #4
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Цитата:
ну конечно 4 функция требует, а сколько же их должно быть если сравниваются элемент двух стеков..
Тогда что по-вашему должно значить вот это:
Код:
int Comparison(List *H1, List *H2, List *Elem1, List *Elem2) {
	Elem1=H1;
	Elem2=H2;
EUGY вне форума Ответить с цитированием
Старый 16.01.2013, 22:58   #5
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

H1 - вершина первого стека, H2 второго
Elem1 - текущий э-т первого стека, Elem2 второго
Igor95 вне форума Ответить с цитированием
Старый 16.01.2013, 23:03   #6
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

И зачем вводить в функцию текущие, если их сразу и без условий приравнивают к вершинам?
EUGY вне форума Ответить с цитированием
Старый 16.01.2013, 23:06   #7
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

как сразу?
Igor95 вне форума Ответить с цитированием
Старый 16.01.2013, 23:06   #8
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

т.е это уже не обязательно?
Igor95 вне форума Ответить с цитированием
Старый 16.01.2013, 23:10   #9
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

Igor95 вне форума Ответить с цитированием
Старый 16.01.2013, 23:10   #10
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

вот такое выдает...
Igor95 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
стек goluzov Общие вопросы C/C++ 4 27.11.2011 17:08
стек Сайын Помощь студентам 0 21.10.2011 21:17
Стек Цветик Общие вопросы C/C++ 0 25.11.2010 17:42
Стек [ICQ] Помощь студентам 5 02.05.2010 13:44