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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.04.2011, 18:52   #1
rowlin
Пользователь
 
Регистрация: 14.12.2010
Сообщений: 31
По умолчанию Список на С

Доброго времени суток !
помогите разобраться
Код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
const int  k =5;                                                                                                                             
typedef struct Node *link; //ukazatel` na zveno                                                                                                        
typedef int elemtype;

typedef struct Node{
  elemtype elem;
  link next;
}node;

typedef link list;//список задается указателем на звено                                                                                                
list lst1 ,lst2,lst3;//ПОЗже будут созданы еще 2 списка                                                               

list create(elemtype s,int por)
{
  link cur;
  list res;
  int i;
  if (por==1){
 res=cur=(link)malloc(sizeof(node));
 if (res==NULL) printf("Error: не выделилась память");
 cur->elem=s;}
  else{
    cur=cur->next=(list)malloc(sizeof(node));
    if (cur==NULL) printf("Error: не выделилась память");
    cur->elem=s;}
  cur->next=NULL;
  return res;
}

/*++++++РАСПЕЧАТКА_СПИСКА++++++*/
void print(list p){
  for (;p;p=p->next)
    putchar(p->elem);
  putchar('\n');
}

int main()
{
  free(lst1);
  int a;
  elemtype el;
  printf("Введите список 1:\n");
  for (a=1;a<=k;a++){
    printf(">");
    scanf("%i",el);
    lst1=create(el,a);
}
  print(lst1);
}
компиляция проходит успешно ,а при запуске
вот что пишет:
Цитата:

(gdb) run
Starting program:
Введите список 1:
>1

Program received signal SIGSEGV, Segmentation fault.
0xb7ecff67 in _IO_vfscanf ()
from /lib/i686/cmov/libc.so.6
Надеюсь на вашу помошь - заранее спасибо!
rowlin вне форума Ответить с цитированием
Старый 09.04.2011, 23:34   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
const int  k =5;
typedef struct Node *link; //ukazatel` na zveno
typedef int elemtype;

typedef struct Node
{
	elemtype elem;
	link next;
}
node;

typedef link list;//список задается указателем на звено
list lst1 ,lst2,lst3;//ПОЗже будут созданы еще 2 списка

list create(elemtype s, list lst)
{
	link cur;
	if (lst==NULL)
	{
		lst=(link)malloc(sizeof(node));
		if (lst==NULL)
		{
			printf("Error: не выделилась память");
			return 0;
		}
		lst->elem=s;
		lst->next=NULL;
	}
	else
	{
		cur=lst;
		lst=(list)malloc(sizeof(node));
		lst->next=cur;
		if (lst==NULL)
		{
			printf("Error: не выделилась память");
			return 0;
		}
		lst->elem=s;
	}
	return lst;
}

/*++++++РАСПЕЧАТКА_СПИСКА++++++*/
void print(list p)
{
	while (p!=NULL)
	{
		printf("%i\n", p->elem);
		p=p->next;
	}
}

int main()
{
	free(lst1);
	int a;
	elemtype el;
	printf("Введите список 1:\n");
	for (a=1;a<=k;a++)
	{
		printf(">");
		scanf("%i",&el);
		lst1=create(el,lst1);//какой элемент и куда вносить
	}
	print(lst1);
//ещё почистить надо потом
}

Последний раз редактировалось eoln; 09.04.2011 в 23:43.
eoln вне форума Ответить с цитированием
Старый 10.04.2011, 19:33   #3
rowlin
Пользователь
 
Регистрация: 14.12.2010
Сообщений: 31
По умолчанию

Большое Cпасибо.

не отходя темы...
Написал функцию сравнения 3-х списков...но по непонятным мне причинам - она зацикливается при выводе .В чем ошибка ?
Код:
list srav(list p,list r,list s)
{
while (p!=NULL){
while (r!=NULL){
if (p->elem!= r->elem) r =r->next;
else if (p->elem==r->elem){
while (s!=NULL)
if (p->elem== r->elem!=s->elem) s=s->next;
else if (p->elem== r->elem==s->elem) printf("Во все 3 ряда входит %d\n",p->elem);
s=s->next;}
r=r->next;}
p=p->next;}
}
rowlin вне форума Ответить с цитированием
Старый 10.04.2011, 20:29   #4
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Код:
list srav(list p,list r,list s)
{
    list rr=r,ss=s;//запомним начала списков, иначе они изменяются при каждой вложенной итерации
    while (p!=NULL)
    {
        r=rr;
        while (r!=NULL)
        {
            /*if (p->elem!= r->elem) r =r->next;
            else*/ if (p->elem==r->elem)
            {
                s=ss;
                while (s!=NULL)
                {
                    /*if (p->elem== r->elem!=s->elem) s=s->next;
                    else */if (/*p->elem== */r->elem==s->elem) printf("Во все 3 ряда входит %d  \n",p->elem);
                    s=s->next;
                }
            }
            r=r->next;
        }
        p=p->next;
    }
}
И не забывай нормально форматировать код - читать неудобно ведь
eoln вне форума Ответить с цитированием
Старый 12.04.2011, 16:33   #5
rowlin
Пользователь
 
Регистрация: 14.12.2010
Сообщений: 31
По умолчанию

eoln
Спвсибо .. разобрался
rowlin вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Список с заглавным звеном, из текстового файла получить список из записей и по нему уже сделать задание Zigfried Помощь студентам 2 04.10.2010 20:29
связать список строк и список целых чисел lirikoff Помощь студентам 5 31.08.2010 13:23
Сортировка слиянием(1 сорт список+2 сорт список=3 сорт список) Promolol Помощь студентам 0 21.05.2010 23:49
C++. Односвязный список. Уничтожить список Olya90 Помощь студентам 2 10.06.2009 18:52
Данные-проверка-список (список на другом листе) Inbox Microsoft Office Excel 7 26.12.2008 01:43