Реализовать однонаправленный список - C (СИ)
Формулировка задачи:
Ребята помогите нужно реализовать однонаправленный список. Необходимо предусмотреть режим поиска требуемых элементов.
Решение задачи: «Реализовать однонаправленный список»
textual
Листинг программы
#include <conio.h> #include <string.h> #include <stdio.h> typedef struct node { int data; char stroka[20]; struct node *next; } ITEM; ITEM* add_node(ITEM* head, int new_data,char new_stroka[20]) { ITEM *new_item, *prev; new_item=(ITEM *)malloc(sizeof(ITEM)); if(new_item==NULL) { puts("Oshibka videlenija pamjati"); return head; } strcpy(new_item->stroka,new_stroka); new_item->data=new_data; if(head==NULL) { puts("Spisok sozdan"); new_item->next=NULL; return new_item; } if(head->data<new_data) { printf("element %d vstavlen v nachalo spiska\n",new_data); new_item->next=head; return new_item; } prev=head; while(prev->next!=NULL) { if(prev->next->data<new_data) { printf("element %d vstavlen v seredinu spiska\n",new_data); new_item->next=prev->next; prev->next=new_item; return head; } else { prev=prev->next; } } printf("element %d vstavlen v konec spiska\n ",new_data); prev->next=new_item; new_item->next=NULL; return head; } ITEM* delete_node(ITEM* head, int kluch) { ITEM *cur, *prev; prev=NULL; cur=head; while(cur!=NULL && cur->data>=kluch) { if(cur->data==kluch) { while(cur->data==kluch) { printf("udalenie elementa %d\n ",cur->data); if(prev==NULL) { head=head->next; } else { prev->next=cur->next; } free(cur); cur=cur->next; } } prev=cur; cur=cur->next; } printf("element %d otsutstvuet v spiske\n ",kluch); return head; } ITEM* find_node(ITEM* head, int find_data) { ITEM *cur; cur=head; while(cur!=NULL && cur->data>=find_data) { if(cur->data==find_data) { printf("Element %d nayden\n",find_data); return cur; } cur=cur->next; } printf("Element %d ne nayden\n",find_data); return NULL; } ITEM* vivod_node(ITEM* head) { ITEM *cur; cur=head; while(cur!=NULL) { printf("%d\n",cur->data); printf("%s\n",cur->stroka); cur=cur->next; } } ITEM* dopfunc_node(ITEM* head,int element,int new_element) { int x=0,y=0; ITEM *cur, *prev, *tek, *sled, *pred; prev=NULL; cur=head; while(cur!=NULL && cur->data>=element) { x=1; if(cur->data==element) { printf("izmenenie elementa %d\n",cur->data); while(cur->data==element) { if(prev==NULL) { cur->data=new_element; head=cur; cur=cur->next; while(cur->data==element) { cur->data=new_element; cur=cur->next; } return head; } else { cur->data=new_element; } cur=cur->next; } } prev=cur; cur=cur->next; } if(x==0) printf("element %d otsutstvuet v spiske\n ",element); pred=NULL; tek=head; sled=tek->next; while(1) { y = 0; while(tek!=NULL) { if(tek->data<sled->data) { y=1; if(pred==NULL) { tek->next=sled->next; sled->next=tek; head=sled; } else { tek->next=sled->next; sled->next=tek; pred->next=sled; } } pred=tek; tek=sled; sled=sled->next; } if(y==0) break; } printf("Vipolnena zamena"); return head; } int main() { ITEM *head=NULL; char key,str[20]; int chislo,kluch,element,new_element; while(1) { clrscr(); puts("1 - dobavit' element"); puts("2 - udalit' elementi"); puts("3 - poisk"); puts("4 - vivod spiska"); puts("5 - dop funczia"); puts("ESC - Vixod"); key=getch(); switch(key) { case '1': puts("vvedite element"); scanf("%d",&chislo); scanf("%s",&str); head=add_node(head,chislo,str); break; case '2': puts("udalit' elementi"); scanf("%d",&kluch); head=delete_node(head,kluch); break; case '3': puts("vvedite iskomiy element"); scanf("%d",&chislo); find_node(head,chislo); break; case '4': puts("elementi spiska\n"); vivod_node(head); break; case '5': puts("izmenenie elementa"); printf("vvedite element kotoriy nado zamenit'\n"); scanf("%d",&element); printf("vvedite noviy element\n"); scanf("%d",&new_element); dopfunc_node(head,element,new_element); break; case 27: puts("Vihod"); return 0; }getch(); } return 0; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д