Функция 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;
}