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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.05.2012, 21:08   #1
Salatiq
 
Регистрация: 14.05.2012
Сообщений: 3
По умолчанию Односвязный неоднородный список, язык СИ.

Необходимо реализовать добавление элемента после элемента с указанным номером, в неоднородный кольцевой список. Неоднородный список вроде реализовал, а как написать процедуру вставки вообще не имею представления. Прошу помочь.
Получилось что-то такое:
Код:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
typedef struct Node1 *link1;
typedef struct Node2 *link2;
typedef char elemtype1;
typedef int elemtype2;

typedef struct Node1 {
elemtype1 elem;
link1 next1;
link2 next2;
}
node1;

typedef struct Node2 {
elemtype2 elem;
link1 next1;
link2 next2;
}
node2;

typedef link1 list1;
typedef link2 list2;

list1 create (char *s)
{
link1 cur1;
list1 res1;
link2 cur2;
list2 res2;
int i,n,b;
if ( *s == '\0' ) return NULL;
res1 = cur1 = ( link1 ) malloc ( sizeof (node1));
cur1->elem = *s++;
cur1->next2=NULL;
while ( *s != '\0' ) {
cur1 = cur1->next1 = (list1) malloc( sizeof (node1));
cur1->next2=NULL;
cur1->elem = *s++;
}
cur1->next1 = NULL;
printf("n=");
    scanf("%d",&n);
    scanf("%d",&b);
    res2 = cur2 = ( link2 ) malloc ( sizeof (node2));
    cur2->elem = b;
    cur2->next1=NULL;
    cur1->next2 = cur2;
    for (i=1;i<n;i++)
    {
        scanf("%d",&b);
        cur2 = cur2->next2 = ( link2 ) malloc ( sizeof (node2));
        cur2->next1=NULL;
        cur2->elem = b;
    }
    cur2->next2 = NULL;
    cur2->next1 = res1;
return res1;
}
void print(list1 p)
{ int k,n;
    list2 p2;
    k=1;
    n=0;
    while (p->next1!=NULL)
    {  printf("\n%d. ",k);
       printf ("%c", p->elem );
       p=p->next1;
    k++;
    }

    printf("\n%d. ",k);
    printf("%c",p->elem);
    p2=p->next2;
    while (p2!=NULL)
    {   k++;
        printf("\n%d. ",k);
        printf ("%d", p2->elem );
        p2=p2->next2;
    }
}
void main()
{
    int z;
     list1 l;

     char s[80];
     gets(s);
     l=create(s);
     print(l);
     printf("\nvvod nomera ");
     scanf("%d",&z);
}
Список создается из строки и цифр, вводимых с клавиатуры.

Последний раз редактировалось Salatiq; 15.05.2012 в 21:09. Причина: Важно
Salatiq вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
односвязный список(язык Си) bars1984 Помощь студентам 6 15.05.2012 11:25
Неоднородный список на языке Си. Salatiq Помощь студентам 0 14.05.2012 18:30
Необходимо реализовать классы, односвязный список для хранения целых чисел, односвязный список для хранен lineico Помощь студентам 2 09.05.2011 17:45
Однонаправленный неоднородный (гетерогенный) список с однородными подсписками. Chudo4258 Помощь студентам 22 08.03.2009 19:11