Реализовать однонаправленный список - 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;
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.143 из 5
Похожие ответы