Премини към съдържанието
  • Добре дошли!

    Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

    Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

     

Архивирана тема

Темата е твърде стара и е архивирана. Не можете да добавяте нови отговори в нея, но винаги можете да публикувате нова тема, в която да продължи дискусията. Регистрирайте се или влезте във вашия профил за да публикувате нова тема.

Spydoc

Създаване на дек

Препоръчан отговор


Здравейте,

имам малки затруднения със създаването на дек. Условието ми е да се състави програма, която създава дек, съдържащ символи и след това проверява, дали записаната в него дума е палиндром. Написал съм я програмата, но без да използвам дек.

#include<iostream>using namespace std;#include<stdio.h>#include<string.h>int main(){     char sim[20];      int a,b,dyl,sred;     cout<<" Vyvedete niz:";     gets (sim);     dyl=strlen(sim);     sred=dyl;     b=0;     for (a=0;a<sred;a++)     {         if (sim[a]!=sim[dyl-a-1])            b++;     }     cout<<"Nizyt "<<sim;     {         if(b>0)            cout<<" ne e palindrom";         else cout<<" e palindrom";     }}

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Можеш примерно да създадеш един масив и да имаш една константа за средна точка на тоя масив и единия край на опашката да работи от средната точка към началото, а другия край да работи от другата страна на масива. Например ако имаш масив с големина 100 и среда 50 - единия край да работи от 49-тия елемент до нулевия, а другия да работи от 51-ви елемент до края на масива и само да сравняваш елементите после.

Нещо такова:

...char deque[50];const int OFFSET = 25; // средния елемент на масива...//Примерно единия край да работи от deque[OFFSET-1] до >= 0, а другия край да работи от deque[OFFSET+1] до големината на масива(deque.size)

И после само вкарваш елементите в двете половини на масива и ги сравняваш чрез някакви цикли. Или по-точно трябва да вкараш едната половина от думата в първата част на масива, другата половина на думата във втората част на масива и да ги сравниш.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

И после само вкарваш елементите в двете половини на масива и ги сравняваш чрез някакви цикли. Или по-точно трябва да вкараш едната половина от думата в първата част на масива, другата половина на думата във втората част на масива и да ги сравниш.

Някак си не ми звучи, като работа с дек.

Здравейте,имам малки затруднения със създаването на дек. Условието ми е да се състави програма, която създава дек, съдържащ символи и след това проверява, дали записаната в него дума е палиндром. Написал съм я програмата, но без да използвам дек.

Ти трябва да създадеш собствен (като структура от данни) дек или да ползваш този от STL?

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Някак си не ми звучи, като работа с дек.

А как се работи с дек?

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Трябва да създам собствен дек, с използване на функции за push и pop.


Сподели този отговор


Линк към този отговор
Сподели в други сайтове

ами създай го де. deque е опашка с два края, така че операциите са за двата края: push_front, push_back, pop_front и pop_back.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Edit: Оправих си грешката. Ето го финалния вид на задачата, направена с дек.

#include <iostream>using namespace std;struct elem{    char key;    elem *next;}*l=NULL,*r=NULL;void push_r(char n){   elem *p=r;   r=new elem;   r->key=n;   r->next=NULL;   if (p)        p->next=r;   else l=r;}int pop_l(int &n){    if (l)    {       n=l->key;       elem *p=l;       l=l->next;       delete p;       return 1;    }    else return 0;}int pop_r(int &n){    if (r)    {        n=r->key;        if (l==r)        {            delete r;            l=r=NULL;        }        else        {            elem *p=l;            while (p->next!=r)                p=p->next;                p->next=NULL;                delete r;                r=p;        }        return 1;    }    else return 0;}int main(){    char n;    int a,b;    int f=0;    cout<<"Vyvedete duma simvol po simvol."<<endl;    do    {        cin>>n;        if (n!='/')        push_r(n);    }while (n!='/');    while (l!=r)    {        pop_l(a);        pop_r(b);        if (a!=b)            f=1; break;    }    if (f==1)        cout<<"Dumata ne e palindrom"<<endl;    else cout<<"Dumata e palindrom"<<endl;}

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Edit: Оправих си грешката. Ето го финалния вид на задачата, направена с дек.

Ако направиш дека с контейнер - двойносвързан списък, ще си спестиш обхождането при вземане на елемент от края.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

×
×
  • Добави ново...