Код
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);
}
}
}
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.
Удаление двух одинаковых подряд идущих элементов в списке, Си |
Zas |
Сообщение
#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); } } } |
volvo |
Сообщение
#2
|
Гость |
А программу полностью ты не мог привести? Или мы должны написать сами, чтобы ПРОВЕРИТЬ работу этой процедуры?
|
Алена |
Сообщение
#3
|
Гость |
void twosimbols(pt list) { |
Zas |
Сообщение
#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; } |
Zas |
Сообщение
#5
|
Новичок Группа: Пользователи Сообщений: 11 Пол: Мужской Реальное имя: Юрий Репутация: 0 |
Помогите пожалуйста.
|
Текстовая версия | 18.09.2024 19:52 |