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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.09.2014, 20:35   #1
magic666
Пользователь
 
Регистрация: 26.09.2014
Сообщений: 11
По умолчанию Сжать список, убрав все четные числа

Не могу удалить эти четные элементы.Только список выводиться и все. Уже голову сломал( Помогите пожалуйста.
list.h
Код:
#ifndef SLIST_H
#define SLIST_H
#define SIZE 7
typedef enum {false,true} bool;
typedef struct SNODE  SNODE;
typedef struct SNODE *PNODE;
typedef struct SLIST SLIST;
 
struct SNODE{
    int key;
    int info;
    PNODE next;
}node;
 
struct SLIST{
    int count;
    int size;
    PNODE head,tail;
}slist;
 
void init_slist(SLIST*);
bool is_slist_empty(SLIST*);
bool is_slist_overflow(SLIST*);
bool delete_from_slist(SLIST*, int);
 
void print_slist(SLIST*);
#endif /*SLIST_H*/

main.c
Код:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "list.h"
 
int main()
{
SLIST *sl;
PNODE nd;
bool t;
int i,_key;
sl = (SLIST*)malloc(sizeof(slist));
init_slist(sl);
srand(time(0));
print_slist(sl);
//i=0;
for(i=0;i<SIZE;i++){
   nd = (PNODE)malloc(sizeof(node));
   nd->key = i+1;
   nd->info = rand()%30;
   printf("(%d)\n", nd->info);
}
if(i%2 == 1){
   t = delete_from_slist(sl,_key);
   i++;
}
print_slist(sl);
free(nd);
return 0;
}
void init_slist(SLIST *st)
{
    st->count = 0;
    st->size = SIZE;
    st->head = st->tail = NULL;
}
 
bool is_slist_empty(SLIST *st)
{
    return ((st->count == 0)?true:false);
}
bool is_slist_overflow(SLIST *st)
{
    return((st->count == st->size)?true:false);
}
 
void print_slist(SLIST *st)
{
    PNODE nd;
    nd = st->head;
    while(nd!=NULL)
{
    printf("(%d-%d)->",nd->key, nd->info);
    nd = nd->next;
}
printf("\n");
bool delete_from_slist(SLIST*st, int _key)
{
    PNODE nd;
    int i;
    bool res;
    nd = st->head;
  //  for(i=0; i<SIZE;i++)
  //  {
 
//if ( (nd->key)%2 == 1 ){
    if(nd == st->head && nd->key == _key)
    {
        st->head = st -> head -> next;
        st->count --;
        res = true;
        free(nd);
    }
    else while (nd!=NULL && nd->next->key!=_key)
 
    nd = nd->next;
    if(nd!=NULL)
    {
 
        PNODE tmp = nd->next;
        nd->next = nd->next->next;
        st->count--;
        res = true;
        if(tmp == st->tail)
        st->tail = nd;
        free(tmp);
    }
    else
    res = false;
    return res;
}
}
magic666 вне форума Ответить с цитированием
Старый 26.09.2014, 23:47   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Поставь точку прерывания на строке:
Код:
t = delete_from_slist(sl,_key);
И посмотри чему равен _key.
Ибо не вижу где ты задаешь ему значение.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.09.2014, 12:37   #3
magic666
Пользователь
 
Регистрация: 26.09.2014
Сообщений: 11
По умолчанию

Я присвою так: int _key = nd->key%2.
magic666 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дан массив. Вывести вначале все четные числа в порядке возрастания их индексов, затем - все нечетные в порядке убывания.( Delphi ) simonte Помощь студентам 9 07.12.2013 06:54
выводит все четные числа расположенные между двумя Nekro95 Паскаль, Turbo Pascal, PascalABC.NET 4 21.12.2012 20:17
С++ Найти все четные четырехзначные числа, цифры которых следуют в порядке возрастания или убывания. Anya She Помощь студентам 14 14.12.2012 16:12
С .в матрице, строку где все числа четные, расположить в обратном порядке. daimonTM Помощь студентам 1 22.12.2010 10:02
в заданном массиве вывести все четные числа leysan Помощь студентам 2 09.12.2009 22:08