![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 22.11.2012
Сообщений: 52
|
![]()
Здравствуйте всем. мне необходимо собрать стек из структуры которая приведена в коде ниже. обратится к одному полю не составляет труда а вот взять сразу все поля и добавить в стек как один элемент что то не получается(( помогите кто нить, пожалуйста.
#include "stdafx.h" #include <conio.h> #include <iostream> using namespace std; typedef struct kniga { char name[100]; char name1[100]; char name2[100]; struct kniga* next; } Kniga; Kniga* top = NULL; void push(char* name) { Kniga* ptr = (Kniga *)malloc(sizeof(Kniga)); strcpy(ptr->name,name); ptr->next = top; top = ptr; } void pop() { if(top != NULL) { Kniga* ptr = top->next; printf("%s - deleted\n",top->name); free(top); top = ptr; } } void show_stack() { Kniga* ptr = top; while(ptr != NULL) { printf("%s\n",ptr->name); ptr = ptr->next; } } int _tmain(int argc, _TCHAR* argv[]) { char str[100]; for(int i = 0;i < 5;i++) { sprintf(str,"Object %d",i+1); push(str); } show_stack(); while(top != NULL) pop(); system("pause"); return 0; } заранее спасибо! Последний раз редактировалось svkpro; 25.11.2012 в 18:06. |
![]() |
![]() |
![]() |
#2 |
Новичок
Джуниор
Регистрация: 25.11.2012
Сообщений: 4
|
![]()
Не понял - в функции push() через malloc Вы выделяете память под всю структуру kniga (через sizeof) поэтому в стек Вы можете заносить все поля через полученный ptr - Вы же заносите только первое поле. Ну, а в функции pop() получив ptr на всю структуру Вы можете выводить все поля - Вы же выводите только первое. Только должно быть так:
void push(char* name, char* name1, char* name2) { Kniga* ptr = (Kniga *)malloc(sizeof(Kniga)); strcpy(ptr->name,name); strcpy(ptr->name1,name1); strcpy(ptr->name2,name2); ptr->next = top; top = ptr; } Ну и соответственно: void pop() { if(top != NULL) { Kniga* ptr = top->next; printf("%s - deleted\n",top->name); printf("%s - deleted\n",top->name1); printf("%s - deleted\n",top->name2); free(top); top = ptr; } } Ну и естественно push должна вызываться с тремя аргументами. |
![]() |
![]() |
![]() |
#3 |
Новичок
Джуниор
Регистрация: 25.11.2012
Сообщений: 4
|
![]()
Не забудьте изменить _tmain().
Последний раз редактировалось Andrew1961; 25.11.2012 в 18:40. |
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 22.11.2012
Сообщений: 52
|
![]()
большое спасибо!
|
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 22.11.2012
Сообщений: 52
|
![]()
всем огромное спасибо! я понял в чем дело. если кому интересно вот рабочий код:
#include "stdafx.h" #include <conio.h> #include <iostream> using namespace std; typedef struct kniga { char shifr[10]; char avtor[10]; char nazv[10]; char izdat[10]; char god[10]; struct kniga* next; } Kniga; Kniga* top = NULL; void push(char* shifr, char* avtor, char* nazv, char* izdat, char* god) { Kniga* ptr = (Kniga *)malloc(sizeof(Kniga)); strcpy(ptr->shifr,shifr); strcpy(ptr->avtor,avtor); strcpy(ptr->nazv,nazv); strcpy(ptr->izdat,izdat); strcpy(ptr->god,god); ptr->next = top; top = ptr; } void pop() { if(top != NULL) { Kniga* ptr = top->next; printf("%s ",top->shifr); printf("%s ",top->avtor); printf("%s ",top->nazv); printf("%s ",top->izdat); printf("%s - deleted\n",top->god); free(top); top = ptr; } } void show_stack() { Kniga* ptr = top; while(ptr != NULL) { printf("%s ",ptr->shifr); printf("%s ",ptr->avtor); printf("%s ",ptr->nazv); printf("%s ",ptr->izdat); printf("%s \n",ptr->god); ptr = ptr->next; } } int main() { locale::global(locale("Rus")); char str1[10]; char str2[10]; char str3[10]; char str4[10]; char str5[10]; for(int i=0;i<3;i++) { sprintf(str1,"запись %d",i+1); sprintf(str2,"запись %d",i+1); sprintf(str3,"запись %d",i+1); sprintf(str4,"запись %d",i+1); sprintf(str5,"запись %d",i+1); push(str1,str2,str3,str4,str5); } show_stack(); while(top != NULL) pop(); system("pause"); return 0; } Последний раз редактировалось svkpro; 26.11.2012 в 00:53. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Структуры данных "стек" | 777Aidar777 | Помощь студентам | 5 | 26.11.2012 11:26 |
Динамические структуры данных, списковые структуры (надо разобраться что делает программа) | _4Alex4_ | Помощь студентам | 1 | 14.11.2012 07:39 |
Написание программ (древовидные структуры, структуры неспециального вида и т.д.) | Green Gin | Фриланс | 2 | 27.04.2012 15:26 |
Стек, структуры, С++! HELP!!!!!!! | Vikylik | Помощь студентам | 0 | 22.04.2009 14:40 |