Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Для новичков > Списки С++ |
Автор: Stanik24 17.7.2015, 18:58 |
Подскажите пожалуйста. Нужно пройти по списку и найти слово по первой букве, запомнить адрес, и начиная от этого адреса пройтись влево и вправо, посчитать общее количество узлов.Результаты вывести на экран.Вот Список, который записывается в txt файл. Там есть закоментированый вариант реализации, в нем что-то не так.Подскажите пожалуйста что?!Буду очень благодарен, за совет и за помощь. Есть предположение что я что -то напутал с областью видимости, и программа просто не видит нужный мне кусок кода. #include <iostream> #include <cstring> #include <stdio.h> #include <cstddef> #include <conio.h> struct NodeLeter { char word[60]; int count; NodeLeter *next,*prev;//It's previor and next element }; typedef NodeLeter*PNodeLeter; PNodeLeter Head=NULL,Tail=NULL;//It's first and end head and tail PNodeLeter CreateNodeLetter(char NewWord[])//We create node with function { PNodeLeter NewNodeLeter=new NodeLeter; strcpy(NewNodeLeter->word,NewWord); NewNodeLeter->count=1; NewNodeLeter->next=NULL;//always must be null NewNodeLeter->prev=NULL;//always NULL to return NewNodeLeter; } void AddFirstElement(PNodeLeter&Head,PNodeLeter&Tail,PNodeLeter NewNodeLeter)//We add element for List { NewNodeLeter->next=Head;//It's always must be, head will be in NewNodeLeter NewNodeLeter->prev=NULL;//from begining=NUll,its data from struct in begining if(Head)Head->prev=NewNodeLeter;//Its bool operator,will do condition Head=NewNodeLeter;//Head will save NewNodeLeter if(!Tail)Tail=Head;//bool condition } void AddLastElement(PNodeLeter &Head,PNodeLeter &Tail,PNodeLeter NewNodeLeter)//With this function we add last element of list { NewNodeLeter->prev=Tail; NewNodeLeter->next=NULL; if(Tail)Tail->next=NewNodeLeter; Tail=NewNodeLeter; if(Head)Head=Tail; } void addAfter(PNodeLeter&Head,PNodeLeter&Tail,PNodeLeter p,PNodeLeter NewNodeLeter)//It's function Add element after { if(!p->next) AddLastElement(Head,Tail,NewNodeLeter); else { NewNodeLeter->next=p->next; NewNodeLeter->prev=p; p->next->prev=NewNodeLeter; p->next=NewNodeLeter; } } void addBefore(PNodeLeter&Head,PNodeLeter&Tail,PNodeLeter p,PNodeLeter NewNodeLeter)//It's function Add element before { if(!p->prev) AddFirstElement(Head,Tail,NewNodeLeter); else { NewNodeLeter->prev=p->prev; NewNodeLeter->next=p; p->prev->next=NewNodeLeter; p->prev=NewNodeLeter; } } PNodeLeter Find(PNodeLeter Tail,char NewWord[])//Find word { PNodeLeter q=Tail; while (q&&strcmp(q->word,NewWord)) q=q->prev; return q; } PNodeLeter FindPlace(PNodeLeter Tail,char NewWord[]) { PNodeLeter q=Tail; while (q&&(strcmp(q->word,NewWord)>0)) q=q->prev; return q; } void Delete(PNodeLeter&Head,PNodeLeter&Tail,PNodeLeter OldNodeLeter) { if (Head==OldNodeLeter) { Head=OldNodeLeter->next; if (Head) Head->prev=NULL; else Tail=NULL; } delete OldNodeLeter; } int main() { PNodeLeter p,where; FILE *in,*out; char word[60]; int n; in=fopen("input1.txt","r"); if(in!=NULL)printf("File open successfull!Press ENTER\n");//We entered from A...to last element getchar(); while (1) { n=fscanf(in,"%s",word); if(n<0)break; p=Find(Tail,word); if(p) p->count++; else { p=CreateNodeLetter(word); where=FindPlace(Tail,word); if(!where)AddFirstElement(Head,Tail,p); else addAfter(Head,Tail,where,p);//Wrote!!! } } fclose(in); printf("Double-linked list create successfull! Press ENTER\n"); getchar(); out = fopen("output-d.txt","w"); p = Tail; while (p) { fprintf(out, "%-20s\t%d\n", p->word, p->count); p = p->prev; } /* PNodeLeter Find(PNodeLeter Head, PNodeLeter Tail, char ch) { PNodeLeter p = Head; while (p != tail) { if (p->word[0] == ch) { p=Head; } p = p->next; } PNodeLetter leftp = p; while (leftp != Head) { leftCur = leftCur->prev; } PNodeLetter rightp = p; while (rightCur != head) { rightp = rightp ->next; } return p; }*/ fclose(out); return 0; } |
Автор: Stanik24 20.7.2015, 21:32 |
Здравствуйте!Коментарии на английском писал Я. И Find в main тоже Я сунул, потому как только учусь, поэтому прошу прощение за вопросы которые Вам кажутся нелепыми, и благодарен за советы которые помогут научится чему то новому. |