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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.11.2014, 22:21   #1
nwhta
Форумчанин
 
Регистрация: 30.08.2013
Сообщений: 153
По умолчанию задача с листами

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

typedef struct node
{
	int  num;
	struct node *next;
	struct node *Prev;
} Node;
Node *init()
{
	int i;
	Node *ptr = (Node*)calloc(10, sizeof(Node));
	for (i = 1; i <= 10; i++, ptr->next)
	{
		ptr->num = 1;
		ptr->next = NULL;
	}

}
int main()
{
	Node *head;
	head = 0;
	head->num = 1;
	head->next = NULL;
	head->Prev = NULL;
	return 0;
}
привет всем! хотел поиграться с листами для практики, пишу такой код вот..............скажи что не так?
больше знаю, лучше сплю)

Последний раз редактировалось Stilet; 08.11.2014 в 22:44.
nwhta вне форума Ответить с цитированием
Старый 08.11.2014, 22:43   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Функцию инит написали, но не вызываете
Функция инит возвращает что-то, а ретурна нет
Массивы нумеруются с нуля
ptr->next что вы этим хотели сделать в цикле?
зачем вам массив, если делаете лист?
В мейне пытаетесь разыменовать нулевой указатель - упадет, если скомпилится
p51x вне форума Ответить с цитированием
Старый 08.11.2014, 23:37   #3
nwhta
Форумчанин
 
Регистрация: 30.08.2013
Сообщений: 153
По умолчанию

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

typedef struct node
{
	int  num;
	struct node *next;
	struct node *Prev;
} Node;
Node *init()
{
	int i;
	Node *ptr = (Node*)calloc(10, sizeof(Node));
	for (i = 1; i <= 10; i++, ptr->next)
	{
		ptr->num = 1;
		ptr->next = NULL;
	}

}
int main()
{
	Node *head = (Node*)malloc(sizeof(Node));
	head->num = 1;
	head->next = NULL;
	head->Prev = NULL;
	head->next = init();
	return 0;
}
исправил код, пашет)

Цитата:
Сообщение от p51x Посмотреть сообщение
Функцию инит написали, но не вызываете
Функция инит возвращает что-то, а ретурна нет
Массивы нумеруются с нуля
ptr->next что вы этим хотели сделать в цикле?
зачем вам массив, если делаете лист?
В мейне пытаетесь разыменовать нулевой указатель - упадет, если скомпилится
заработался)

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

typedef struct node
{
	int  num;
	struct node *next;
	struct node *Prev;
} Node;
void print_f(Node* head)
{
	Node* ptr;
	for (ptr = head; ptr->next < NULL; ptr->next)
	{
		printf("%d ", ptr->num);
	}
}
Node *init()
{
	Node *ptr = (Node*)malloc(9*sizeof(Node));

	 while(ptr->next !=NULL)
	 {
		ptr->num++;
		ptr->next = ptr;
	 }
	return ptr;
}
int main()
{
	Node *head = (Node*)malloc(sizeof(Node));
	head->num = 0;
	head->next = NULL;
	head->Prev = NULL;
	head->next = init();
	print_f(&head);
	return 0;
}
обновляю код, задумка просто чтобы поиграть с листами, добавлять, удалять нужные пока что.
я просто практикой решил заняться перед экзаменом...........подсказывайте пожалуйста кодом, что не так, что криво или не нужно для упрощения кода и понимания
больше знаю, лучше сплю)

Последний раз редактировалось Stilet; 09.11.2014 в 10:06.
nwhta вне форума Ответить с цитированием
Старый 09.11.2014, 08:20   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Вы на часть старых вопросов не ответили.

ptr->next < NULL что это?

Код:
while(ptr->next !=NULL)
{
ptr->num++;
последний элемент не обрабатываете

Код:
ptr->next = ptr;
вы уверены? что будет с циклом?

зачем в мейне нексту два раза что-то присваивать?
p51x вне форума Ответить с цитированием
Старый 09.11.2014, 13:13   #5
nwhta
Форумчанин
 
Регистрация: 30.08.2013
Сообщений: 153
По умолчанию

Код:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef struct node
{
    int data;
    struct node *next;
    struct node *prev;
 
}Node;
Node *init_item(int num)
{
    int i;
    Node *Prev, *CurrItem, *Next = NULL;
    for (i = 1; i <= num; i++, CurrItem = CurrItem->next)
    {
        CurrItem = (Node*)malloc(sizeof(Node));
        CurrItem->data = i;
        CurrItem->prev = NULL;
        CurrItem->next = Next;
    }
    return CurrItem;
}
int main()
{
    int num = 10;
    Node *startMain = NULL;
    int i;
    startMain = init_item(num);
    for (i = 1; i <= 10; i++)
    {
        printf("%d ", startMain->data);
    }
    return 0;
}
перед экзаменом я решил попрактиковаться и поиграться с одной задачей, а именно с дву-связным списком.........

вот написал такую шнягу, только не как не могу понять правильно ли я:
передаю лист в функцию?
получаю из функции указатель на лист?
понимаю код и его логику?

а так же хотел бы попросить привести свои НЕ ЗАУМНЫЕ примеры насчет таких листов...........

Цитата:
Сообщение от p51x Посмотреть сообщение
Вы на часть старых вопросов не ответили.

ptr->next < NULL что это?

Код:
while(ptr->next !=NULL)
{
ptr->num++;
последний элемент не обрабатываете

Код:
ptr->next = ptr;
вы уверены? что будет с циклом?

зачем в мейне нексту два раза что-то присваивать?
ниже то что я переписал, просто там было куча ошибок вы правы.............
больше знаю, лучше сплю)

Последний раз редактировалось Stilet; 09.11.2014 в 16:41.
nwhta вне форума Ответить с цитированием
Старый 09.11.2014, 22:34   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

зачем вы лепите заготовку для двунаправленного списка, если по факту он у вас однонаправленный?

Код:
 Node *Prev, *Next
зачем они, если не используете?

Код:
 return CurrItem;
и чему он будет равен после цикла? что вы будете в мейне разыменовывать?

Код:
for (i = 1; i <= 10; i++)
    {
        printf("%d ", startMain->data);
вы хотели 10 раз одно и тоже напечатать? кто по листу двигаться будет?

Цитата:
а так же хотел бы попросить привести свои НЕ ЗАУМНЫЕ примеры насчет таких листов...........
Вирт "Алгоритмы и структуры данных"
p51x вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ВПР, работа с 2-мя листами riko782 Microsoft Office Excel 3 23.08.2013 12:25
Переход между листами Fezdipekla Microsoft Office Excel 2 14.06.2010 20:27
Помогите с листами djkon2007 Microsoft Office Excel 15 16.02.2009 13:47
Пропала строка с листами :( SlimBr0ther Microsoft Office Excel 3 24.06.2008 17:52
Работа с листами Flangini Microsoft Office Excel 7 26.02.2008 16:45