Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
0
Добавлен:
16.11.2025
Размер:
3.18 Кб
Скачать
#include <stdio.h>
#include <stdlib.h>
typedef struct el{ // element ocheredi
    int inf;
    struct el *link;
} EL;
EL *found=NULL;
typedef struct q{ // nach. i kon. ukazateli ocheredi
    EL *beg;
    EL *end;
} Q;
void push_end(Q *q, int val) { // dob. v konets
    EL *p;
    p = (EL*) malloc(sizeof(EL));
    p->inf = val;
    p->link = NULL;
    if (q->end == NULL) {
        q->beg = p;
        q->end = p;
        }
    else {
            q->end->link = p;
            q->end = p;
        }
}
void push_start(Q *q, int val) { // dob. v nachalo
    EL *p;
    p = (EL*) malloc(sizeof(EL));
    p->inf = val;
    p->link = NULL;
    if (q->end == NULL) {
        q->beg = p;
        q->end = p;
        }
    else {
            p->link=q->beg;
            q->beg = p;
        }
}
void pop_start(Q *q) { // udal. s nachala
    EL *p;
    p = (EL*) malloc(sizeof(EL));
    p->link = NULL;
    if (q->beg == NULL) { // popitka udaleniya iz pustoi ocheredi
        exit(1);
        }
    else if((q->beg)==(q->end)){
        q->beg=NULL;
        q->end=NULL;
    }
    else {
            q->beg=q->beg->link;
        }
}
void pop_end(Q *q) { // udalenie s kontsa
    EL *p;
    p = (EL*) malloc(sizeof(EL));
    p->link = NULL;
    if (q->beg == NULL) { // popitka udaleniya iz pustoi ocheredi
        exit(1);
    }
    else if((q->beg)==(q->end)){
        q->beg=NULL;
        q->end=NULL;
    }
    else {
        if((q->beg)!=NULL){
                p=q->beg;
                while((p->link)!=(q->end)){
                        p=p->link;
                }
                q->end=p;
                q->end->link=NULL;
        }
    }
}
void output(Q *q){
    EL *p;
    if((q->beg)!=NULL){
        p=q->beg;
        while((p->link)!=NULL){
                printf("%4d", p->inf);
                p=p->link;
        }
        printf("%4d\n", p->inf);
    }
}
void find(Q *q, int val){ // poisk
    EL *p;
    if((q->beg)!=NULL){
        p=q->beg;
        while(((p->link)!=NULL)&&(found==NULL)){ // probezhka po listu
                if((p->inf)==val){
                        found=p;
                }
                p=p->link;
        }
        if(((p->inf)==val)&&(found==NULL)){
            found=p;
        }
    }
}
void delfound(Q *q, EL *delelement){ // udalenie po adresu
    EL *p;
    if((q->beg)!=NULL){
        p=q->beg;
        while((p->link)!=NULL){ // probezhka po listu
                if((p->link)==delelement){
                        p->link=delelement->link;
                }
                p=p->link;
        }
    }
}
int main(void){
    Q *queue;
    int a, b, v, s=0;
    queue = (Q*) malloc(sizeof(Q));
    queue->beg == NULL;
    queue->end = NULL;
    a=scanf("%d", &b); // boolean: esli chislo, daet true, elsi bukva (v tom chisle "n" - to false)
    push_start(queue, b);
    while(a){ // zapolnenie
        a=scanf("%d", &b);
        if(a) push_start(queue, b);
    }
    v=getchar();
    scanf("%d", &v);
    find(queue, v);
    if(found!=NULL){
        delfound(queue, found);
    }
    output(queue);
}
Соседние файлы в папке 3 семестр