Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Однонаправленный список, Удалить каждый 3 элемент 
:(
    Опции темы
madbizarre
Дата 25.11.2010, 00:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 13.11.2006

Репутация: нет
Всего: нет



Язык Си
Код

#include <stdio.h>
#include <stdlib.h>

//Opisanie strukturi tipa odnonapravlenni spisok
typedef struct _Element{
    int Val;
    struct _Element *Next, *Prev;
} Element;
Element *Head = NULL, *Curr = NULL;
int cnt = 0;

int Add(int chislo)
{
  Element *tmp = (Element *)malloc(sizeof(Element));
  if(!tmp) return 0;
  if(!Head){
    Head=tmp; tmp->Prev=NULL; tmp->Next=NULL;
 }else{
   if(!Curr) Curr=Head;
   while(Curr->Next) Curr=Curr->Next;
   Curr->Next=tmp;
   tmp->Prev=Curr;
   tmp->Next=NULL;
 }
 tmp->Val=chislo; Curr=tmp;
 return 1;
} 

int Del()
{
   if(Curr==NULL) return 0;
   Element *tmp=Head;
   Curr=tmp->Next->Next;
   tmp=Curr->Prev;
   if(!tmp){
     Head=Head->Next; Head->Prev=NULL;
   }else{
     tmp->Next=Curr->Next;
     if(Curr->Next) Curr->Next->Prev=tmp;
   }
   free(Curr); Curr=tmp;
   return 1;
} 

int Print()
{
    Element *tmp = Head;
    printf("\nSpisok elementov posle udalenia:\n");
    while (tmp) 
    {
        printf("%d\t", tmp->Val);
        tmp = tmp->Next;
    }
}

//Glavnaia functsia
int main()
{
  int kol,elem=0;
    printf("Vvedite kolichestvo elementov spiska: ");
    scanf("%d",&kol);
    printf("\n");
    for (int k = 0; k < kol; k++) 
  {
     printf("Vvedite element No%d : ",k);
     scanf("%d",&elem);
     Add(elem);
  }
    Del();
    Print();
    printf("\n");
    return 0;
}

Вобщем удаляет 3 элемент, не могу понять как сделать чтобы удалял каждый 3 элемент в списка
PM MAIL   Вверх
Incinerated
Дата 25.11.2010, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 162
Регистрация: 18.5.2006
Где: Беларусь, Новопол оцк

Репутация: нет
Всего: нет



Цитата(madbizarre @ 24.11.2010,  23:26)
Вобщем удаляет 3 элемент, не могу понять как сделать чтобы удалял каждый 3 элемент в списка

удалял каждый 3 элемент изначального списка?

в общем если надо каждый 3 изначального, то думаю вот так будет выглядеть твоя функция удаления:
Код

int Del()
{
   if(Curr==NULL) return 0;
   if (!Curr->Next){ //если число элементов списка кратно 3
       Curr->Prev->Next = Curr->Next;
       Element *tmp=Curr->Prev;
       free(Curr);
       Curr = tmp;
       return 1;
   }
   Curr->Prev->Next = Curr->Next;
   Curr->Next->Prev = Curr->Prev;
   Element *tmp=Curr->Next;
   free(Curr); Curr=tmp;
   return 1;
} 

и перед вызовом Print() вставь следующий код вместо Del():
Код

    Curr = Head;
    int i = 1;
    while (Curr = Curr->Next)
    {
        i++;
        if (i == 3){
            Del();
            i = 1;
        }
    }

если требуется другое, напиши)

Это сообщение отредактировал(а) Incinerated - 25.11.2010, 11:15
PM MAIL   Вверх
madbizarre
Дата 26.11.2010, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 13.11.2006

Репутация: нет
Всего: нет



Спасибо очень помог
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0516 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.