Skip to content

Instantly share code, notes, and snippets.

@resure
Created March 23, 2011 15:30
Show Gist options
  • Save resure/883291 to your computer and use it in GitHub Desktop.
Save resure/883291 to your computer and use it in GitHub Desktop.
#include <stdio.h>
#include <locale.h>
#include <string.h>
#include <stdlib.h>
typedef struct list { list *next; list *prev; char val[100]; };
void print_list( list *element) {
while (element != NULL){
printf("%s ", element -> val);
element = element -> next;
}
}
int main() {
list *first, *last, *cur, *imax, *imin, *tmp;
char str[100], *s=str, *p;
int i, n, max, min;
setlocale(0, "russian");
cur = first = last = tmp = new list;
printf("Введите строку:\n");
scanf("%s", s);
p = cur -> val;
strcpy(p, s);
max = min = strlen(cur -> val);
imax = imin = cur;
first = last = cur;
while (str[strlen(str)-1]!='.') {
scanf("%s", s);
cur = new list;
p = cur -> val;
strcpy(p, s);
if (strlen(cur -> val) >= strlen(last -> val)) {
last -> next = cur;
cur -> prev = last;
last = cur;
last -> next = NULL;
} else if (strlen(cur -> val) <= strlen(first -> val)) {
first -> prev = cur;
cur -> next = first;
first = cur;
first -> prev = NULL;
} else {
tmp = last;
while (strlen(cur -> val) < strlen(tmp -> val)) {
tmp = tmp -> prev;
}
(tmp -> next) -> prev = cur;
cur -> next = tmp -> next;
cur -> prev = tmp;
tmp -> next = cur;
}
if (strlen(cur -> val) >= max) {
max = strlen(cur -> val);
imax = cur;
}
if (strlen(cur -> val) <= min) {
min = strlen(cur -> val);
imin = cur;
}
}
printf("\nНаш список:\n");
print_list(first);
printf("\n\nСамое длинное слово: %s\nСамое короткое: %s\n", imax -> val, imin -> val);
printf("\nПереставляем эти слова местами и получаем:\n");
char *mx = imax -> val;
char *mn = imin -> val;
p = str;
strcpy(p, mx);
strcpy(mx, mn);
strcpy(mn, p);
print_list(first);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment