Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
Женя.
4 / 4 / 1
Регистрация: 10.02.2010
Сообщений: 38
1

Стек, бинарное дерево и очередь

21.02.2010, 00:42. Просмотров 1364. Ответов 1
Метки нет (Все метки)

Помогите,плииииз, я думаю все через єто прошли...

то просто я даже не могу понять что от мены хотят...

а к понедельнику уже все нужно сделать =(((

задание состоит в том, чтобы написать проги на


1.Stack:
- Размещение
- Поиск
- удаление
2.Двусторонняя Очередь
- Вставить (в начале или в конце)
- Поиск
удаления (с начала или в конце )
3.Двоичное дерево:
- Размещение
- Поиск
(без удаления элемента)


я понимаю что есть функции, но как их совместить в три проги понять как-то не могу...
подскажите плиз

или посоветуйте хотя бы, а то я одна не справлюсь...

Добавлено через 1 минуту
Вот это функцыи на дерево =((
но здесь че-то не то...

как его поправить и сделать чтобы работало =((

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
struct wezel
{
struct wezel *lewy, *prawy;
};
 
typedef struct wezel *pwezel;
pwezel korzen=NULL;
 
pwezel wstaw (int d)
{
pwezel z;
pwezel y=NULL,x=korzen;
z=(pwezel)malloc(sizeof(struct wezel));
if (z==NULL)
{
printf("\nBlad wstawiania elementu.\n");
return NULL;
}
z->dana=d;
z->lewy=NULL;
z->prawy=NULL;
while (x!=NULL)
{
y=x;
if (d<x->dana) x=x->lewy;
else x=x->prawy;
}
if (y==NULL)
korzen=z;
else
{
if(d<y->dana) y->lewy=z;
else y->prawy=z;
}
return z;
}
 
pwezel szukaj(pwezel r, int k)
{
if (r==NULL || k==r->dana) return r;
if (k<r->dana) szukaj(r->lewy,k);
else szukaj(r->prawy,k);
}




Вот это STACK, подскажите плиз как его в функцыю main обьеденить =((
если не трудно ...

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
struct stos
{
char element;
struct stos *wskaznik;
 
};
 
struct stos *nowy, *stary;
 
void na_stos(char znak)
{stary=nowy;
nowy= malloc (sizeof(struct stos));
nowy->element=znak;
nowy->wskaznik=stary;
}
 
void ze_stosu(struct stos *wskaz_element)
{
if (wskaz_element!=NULL)
{
stary=wskaz_element->wskaznik;
free(wskaz_element);
nowy=stary;
}
}
 
void oczysc_stos(void)
{
stary=nowy;
while (stary!=NULL)
ze_stosu(stary);
printf("\nStos oczyszczony.");
}
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.02.2010, 00:42
Ответы с готовыми решениями:

Бинарное дерево
Здравствуйте.Учусь в техникуме,начали изучать СИ(Обычный СИ.Со следующей недели начнем учить...

Бинарное дерево
Здравствуйте! У меня есть 2 функции для создания дерева и 1 для прохода по дереву. Каждый раз при...

Стек и очередь
Стек – статический; очередь – статическая Система состоит из процессора P, трѐх очередей F0, F1,...

Бинарное дерево поиска
Здравствуйте! Дали такое задание. И нужно вместо троеточий вставить несколько строчек. Как я поняла...

Бинарное дерево не создается
здраствуйте я написал функцию создания и записи в дерево но она не работает. ptree Form() {...

1
SerЁga
32 / 32 / 16
Регистрация: 18.08.2009
Сообщений: 93
21.02.2010, 11:47 2
Стек
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
#include<windows.h>
 
struct zap
{
    char inf[50];
    zap *l;
};
 
void push(zap**);
char* pop(zap**);
void see(zap*);
void sort1(zap*);
void sort2(zap**);
void main()
{
    printf("\a\a\a");
    int n;
    zap *s=NULL;
    void (*f[])(zap**)={push,sort2};
    void (*ff[])(zap*)={see,sort1};
    char* (*fff[])(zap**)={pop};
    while(1)
    {
    printf("\n");
    puts("1-vvod informacii");
    puts("2-vivod informacii");
    puts("3-ydalenie s vercini steca i vivod");
    puts("4-sortirovka 1");
    puts("5-sortirovka 2");
    puts("0-vixod");
    puts("vvedite nomer operacii");
    scanf("%d",&n);
    system("cls");
    
    switch(n)
    {
    case 1:(*f[0]) (&s);break;
    case 2:(*ff[0])(s);break;
    case 3:(*fff[0]) (&s);break;
    case 4:(*ff[1]) (s);break;
    case 5:(*f[1]) (&s);break;
    default: puts("oshibka");return;
    }
    }
}
void push(zap **asn)
{
    zap *s1;
    s1=*asn;////////////////
    do{
        if(!(*asn=(zap*)malloc(1*sizeof(zap)))) {puts("net pamatu");return;}
        puts("vvedite dannie v pole informacii");
        fflush(stdin);
        gets((*asn)->inf);
        (*asn)->l=s1;
        s1=*asn;
        puts("prodolzit y/n");
            fflush(stdin);
    }while(getch()=='y');
    
    system("cls");
}
 
void see( zap *asn)
{
    while(asn)
    {
        printf("\n %s",asn->inf);
        asn=asn->l;
    }
}
 
char* pop(zap **asn)
{
    zap *s1,ss;
    s1=*asn;
    ss=**asn;
    *asn=(*asn)->l;
    free(s1);
    return ss.inf;
}
 
void sort1(zap *asn)
{
    zap *s1,*s2;
    for(;asn->l;asn=asn->l)
    {
        s1=asn;
        for(s2=asn->l;s2;s2=s2->l)
            if(strcmp(s1->inf,s2->inf)>0) s1=s2;
                if(s1!=asn)
                {
                    strcpy(s2->inf,s1->inf);
                    strcpy(s1->inf,asn->inf);
                    strcpy(asn->inf,s2->inf);
                }
        }
    }
 
/*void sort2( zap **s1) //сортировка перемещением указателей методом отбора
{ zap *s2,*s3,*s4,*s5;
   
for(;(*s1)->l;s1=&(*s1)->l)
   {
       s3=s4=*s1;
       for(s2=(*s1)->l;s2;s2=s2->l)
          
       {
           s3=s3->l;
           if(strcmp(s3->inf,s2->inf)>0);
           
       }   
       s4=s3;
           if(s4!=*s1)
           {
               s3=s4->l;
               s5=s4->l;
               s4->l=s5->l ;
               s3->l=*s1;
               *s1=s3;
           }
   }
}
   
*/
 
void sort2( zap **s1) //сортировка перемещением указателей методом отбора
{ zap *s2,*s3,*s4,*s5;
  char st[50]; 
for(;(*s1)->l;s1=&(*s1)->l)
   {
       s3=s4=*s1;strcpy(st,(*s1)->inf);
       for(s2=(*s1)->l;s2;s2=s2->l)
          
       {
           s3=s3->l;
           if(strcmp(st,s2->inf)>0)
           
          
           {s4=s3;strcpy(st,s4->l->inf);}
           if(s4!=*s1)
           {
               s3=s4->l;
               s5=s4->l;
               s4->l=s5->l ;
               s3->l=*s1;
               *s1=s3;
           }
   }
}
 
}
Очередь
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
#include<windows.h>
 
struct zap
{
    char inf[50];
    zap *nx;
};
 
void add(zap**,zap **);
void see(zap*,zap*);
void del_vib(zap **,zap**);
void del(zap**,zap**);
void sort2(zap**,zap**);
void main()
{
    int n;
   zap *h,*t;
    h=NULL;
    t=NULL;
    void (*f[])(zap**,zap**)={add,del,del_vib,sort2};
    void (*ff[])(zap*,zap*)={see};
    
    while(1)
    {
    printf("\n");
    puts("1-vvod informacii");
    puts("2-vivod informacii");
    puts("3-ydalenie s nachala spiska");
    puts("4-sortirovka ");
    puts("5-udalenie vibrannogo elementa spiska");
    puts("0-vixod");
    puts("vvedite nomer operacii");
    scanf("%d",&n);
    system("cls");
    
    switch(n)
    {
    case 1:(*f[0]) (&t,&h);break;
    case 2:(*ff[0])(h,t);break;
    case 3:(*f[1]) (&t,&h);break;
    case 4:(*f[3]) (&t,&h);break;
    case 5:(*f[2]) (&t,&h);break;
    default: puts("oshibka");return;
    }
    }
}
void add(zap **t,zap **h)
{
    zap *s1;
    
    do{
        if(!(s1=(zap*)malloc(1*sizeof(zap)))) {puts("net pamatu");return;}
        puts("vvedite dannie v pole informacii");
        fflush(stdin);
        gets(s1->inf);
        if(!*t) {*h=s1;*t=s1;}
        else {
            (*t)->nx=s1;(*t)=s1;
        }
        
        puts("prodolzit y/n");
            fflush(stdin);
    }while(getch()=='y');
    
    system("cls");
}
 
void see( zap *h,zap *t)
{
    while(h!=t->nx)
    {
        puts(h->inf);
        h=h->nx;
    }
}
 
void del(zap **t, zap **h)
{
    zap *s1;
    if(*t==*h) {free(*h);*t=*h=NULL;}
    s1=*h;
    *h=(*h)->nx;
    free(s1);
}
 
 
void del_vib( zap **t, zap **h)
{
    zap *s1,*s2;char st[50];
    
        puts("vvedite informaciu kotoryu xotite ydalit");
        fflush(stdin);
        gets(st);
 
    if(*t==*h && !strcmp((*h)->inf,st)) {printf("udalenie odnogo elementa");free(*h);*t=*h=NULL;return;}
    
        while(*h && !strcmp((*h)->inf,st))
        {
            s1=*h;
            *h=(*h)->nx;
            free(s1);
        }
 
        s1=(*h)->nx;
        s2=(*h);
          while(s1!=(*t)->nx)
          {
            if(strcmp(st,s1->inf)==0) 
            {
                s2->nx=s1->nx;
                s1=s2->nx;
            }
            else
            {
                s2=s2->nx;
                s1=s1->nx;
            }
         *t=s2; 
    }
}
 
void sort2(zap **t, zap**h)
{
    zap *s1,*s2,*s3,*s4,*hh=NULL;
    s1=s3=*h;
    s4=(zap*)calloc(1,sizeof(zap));// razmeschena pered golovo ocheredy
    for(;s1->nx;s1=s1->nx)
    {
        for(s2=s2->nx;s2;s3=s3->nx,s2=s2->nx)
        {
            if(s2==s1->nx) s3=s1; //s3 prededuc pered s2
            if(strcmp(s1->inf,s2->inf)>0)
            {
                s3->nx=s2->nx;
                s2->nx=s1;
                s4->nx=s2;
                s1=s2;
            }
        }
        if(! hh) 
        {
            hh=s1;
            free(s4);
        }
        s4=s1;
    }
    *h=hh;
}
Дерево, тут много ф-ций выбери нужные
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
#include<windows.h>
 
 
struct der
{
    int inf;
    int n;
    der *l,*r;
};
 
der *sozd(der *);
void add(der*);
void see_1(der*);
void see_2(der*);
void scan(int*);
der *del(der*);
void look(der*,int*,int);
void ris_derev(der *dr,int);
int max_yr(int*);
void pechat(int**,int,int);
int **vid_pam_mt(int,int);
 
void main()
{
    der *dr,*dr1;
    dr=NULL;
    int *mas;
    int k,ind=0,max;
    mas=(int*)calloc(80,sizeof(int));
    while(1)
    {
        
        puts("\n vid operacii");
        puts("1-sozdanie dereva");
        puts("2-dobavlenie informacii");
        puts("3-recursivniy prosmotr dereva");
        puts("4-nerecurcivniy prosmotr dereva");
        puts("5-ydalenie vibrannogo elementa");
        puts("6-pechat listov");
        puts("7-proverca balansa");
        puts("8-pechat dereva");
        puts("9-vixod");
        scanf("%d",&k);
        system("cls");
        switch(k)
        {
        case 1: dr=sozd(dr);break;
        case 2: add(dr);break;
        case 3: see_1(dr);break;
        case 4: see_2(dr);break;
        case 5: del(dr);break;
        case 6: look(dr,mas,ind);break;
        case 7: scan(mas);break;
        case 8: {max=max_yr(mas)+1;ris_derev(dr,max);break;}
        case 9: return;
        }
    }
}
1
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.02.2010, 11:47

Стек и очередь на массиве
Здравствуйте, дорогие программисты! Скиньте, пожалуйста, исходники стека и очереди для...

Упорядочить бинарное дерево по алфавиту
Люди, может то знает, как сортировать бинарное дерево по алфавиту? Язык си Добавлено через 3...

Бинарное дерево. Создание объекта
И снова здравствуйте. Извините, что расплодил темы, но тут, как я понял один вопрос, одна тема, а у...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.