IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Удаление двух одинаковых подряд идущих элементов в списке, Си
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 11
Пол: Мужской
Реальное имя: Юрий

Репутация: -  0  +


написал процедуру для удаления 2 одинаковых подряд идущих элементов списка, почему то не работает, исправьте пожалуйста:
Код

void twosimbols(pt *list){
     pt templist;
     int info1, info2;
     while (list){
           info1= (*list)->info;
           info2= (*list)->next->info;
           if ((info1== info2) && ((*list)->next)){
                        templist=(*list)->next;
                        (*list)->next=((*list)->next)->next;
                        free(templist);
                        }
           }
     }
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






А программу полностью ты не мог привести? Или мы должны написать сами, чтобы ПРОВЕРИТЬ работу этой процедуры?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






void twosimbols(pt list) {
List templist;
T info1, info2;
while(list -> next) {

info1= (list)->value;
info2= (list)->next->value;
if(info1== info2) {
templist=(list)->next;
(list)->next=((list)->next)->next;
free(templist);
}
else list = list -> next;

}
}
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Новичок
*

Группа: Пользователи
Сообщений: 11
Пол: Мужской
Реальное имя: Юрий

Репутация: -  0  +


Функция twosimbols
Код

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

typedef
  struct _elem {

    int info;
    struct _elem *next;

  } elem, *pt;


pt getprelastel(pt list) {

  pt nextel;
  if(list) {

    nextel = list;
    do {
      list = nextel;
      if(list -> next) nextel = list -> next;
    }
    while (nextel -> next);
    return list;

  }
  else
    return 0;

}

pt getlastel(pt list) {

  if(list) {

    for(; list -> next; list = list -> next);
    return list;

  }
  else
    return 0;

}

pt searchel(pt list, int info) {

  if(list) {

    while( (list -> next) && (list -> info != info)) list = list -> next;
    return ((list -> info != info) ? 0 : list);

  }
  else return 0;

}

pt searchpreel(pt list, int info) {

  pt nextel;
  if(list) {

    nextel = list;
    do {

      list = nextel;
      if(list -> next) nextel = list -> next;

    }
    while(!((!nextel -> next) || (nextel -> info == info)));
    return ((nextel -> info != info) || (nextel == list)) ? 0 : list;

  }
  else return 0;

}

int getelem(char *elname) {

  int ret;
  printf("Insert %s : ", elname);
  scanf("%d", &ret);
  return ret;

}

void addtobegin(pt *list, int info) {

  pt newelem;
  newelem = (pt)malloc(sizeof(elem));
  newelem -> info = info;
  newelem -> next = *list;
  *list = newelem;

}


void addafter(pt listel, int info) {

  pt newelem, temp;
  temp = searchel(listel, getelem("Find element value"));

  if(listel && temp) {
    newelem = (pt)malloc(sizeof(elem));
    newelem -> info = info;
    newelem -> next = temp -> next;
    temp -> next = newelem;
  }

}


void addtoend(pt *list, int info) {

  if(!(*list)) addtobegin(list, info);
  else
    addafter(getlastel(*list), info);

}


void addbefore(pt listel, int info) {

  pt newelem, temp;
  temp = searchel(listel, getelem("Find element value"));
  if(listel && temp) {

    newelem = (pt)malloc(sizeof(elem));
    newelem -> info = temp -> info;
    temp -> info = info;
    newelem -> next = temp -> next;
    temp -> next = newelem;

  }

}

void delfirstel(pt *list) {

  pt temp;

  if(*list) {
    temp = *list;
    *list = (*list) -> next;
    free(temp);
  }
}


void dellastel(pt *list) {

  pt temp;
  if(list) {

    if(!((*list) -> next)) delfirstel(list);
    else {
      temp = getprelastel(*list);
      free(temp -> next);
      temp -> next = 0;
    }

  }

}


void delel(pt *list, pt el) {

  pt temp, temp1;
  temp1 = searchel(*list, getelem("Delete element value"));

  if(list && el && temp1) {

    if(!temp1 -> next)
      if(!(*list) -> next) delfirstel(list);
      else dellastel(list);

    else {
      temp = temp1 -> next;
      temp1 -> info = temp -> info;
      temp1 -> next = temp -> next;
      free(temp);
    }
  }
}


void delbefore(pt *list, int info) {

  pt temp;
  if(*list) {
    temp = searchpreel(*list, info);
    delel(list, temp);
  }

}

void delafter(pt *list, int info) {

  pt temp;

  if(*list) {
    temp = searchel(*list, info);
    temp = temp -> next;
    delel(list, temp);
  }

}


void printlist(pt list) {

//  clrscr();
  if(!list) puts("Null");
  else
    while(list) {

      printf("%d\n", list -> info);
      list = list -> next;
    }
    getch();
}


void checkel(pt list, int info) {

  if(searchel(list, info))
    printf("Element exists", info);
  else
    printf("No %d element", info);
//  getch();

}

void listclear(pt *list) {

  pt templist;
  while(list) {
    templist = *list;
    *list = (*list) -> next;
    free(templist);
  }

}

void twosimbols(pt *list){
     pt templist;
     int info1, info2;
     while (list){
           info1= (*list)->info;
           info2= (*list)->next->info;
           if ((info1== info2) && ((*list)->next)){
                        templist=(*list)->next;
                        (*list)->next=((*list)->next)->next;
                        free(templist);
                        }
           }
     }


void showmenu() {
//  clrscr();
  puts("1) Addtobegin\n");
  puts("2) Addtoend\n");
  puts("3) Delfirst\n");
  puts("4) Dellast\n");
  puts("5) Findel\n");
  puts("6) Delel\n");
  puts("7) Addafter\n");
  puts("8) Addbefore\n");
  puts("9) Delafter\n");
  puts("10) Delbefore\n");
  puts("11) Printlist\n");
  puts("12) listclear\n");
  puts("13) twosimbols\n");
  puts("14) Exit\n\n");

  puts(" Desicion : ");
}

int main() {

  pt root;
  int selection;

  root = 0;
  do {

    showmenu();
    scanf("%d", &selection);
    puts("\n");

    switch(selection) {

      case  1: addtobegin(&root,getelem("element value"));
               break;
      case  2: addtoend(&root,getelem("element value"));
               break;
      case  3: delfirstel(&root);
               break;
      case  4: dellastel(&root);
               break;
      case  5: checkel(root,getelem("Find element value"));
               break;
      case  6: delel(&root,root);
               break;
      case  7: addafter(root,getelem("Insert element value"));
               break;
      case  8: addbefore(root,getelem("Insert element value"));
               break;
      case  9: delafter(&root,getelem("Find element value"));
               break;
      case 10: delbefore(&root,getelem("Find element value"));
               break;
      case 11: printlist(root);
               break;
      case 12: listclear(&root);
               break;
      case 13: twosimbols(&root);
                break;        
//      case 14: clrscr();

    }

  } while(selection != 14);
  return 0;

}

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 11
Пол: Мужской
Реальное имя: Юрий

Репутация: -  0  +


Помогите пожалуйста.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.03.2024 7:48
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name