Форум программистов, компьютерный форум CyberForum.ru

Односвязные списки, стек - C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 28, средняя оценка - 4.75
Feldor
0 / 0 / 0
Регистрация: 15.03.2009
Сообщений: 22
06.04.2009, 19:47     Односвязные списки, стек #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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include <iostream>
using namespace std;
struct node{
       int info;
       node *link;
};
       
int main(){
    setlocale(LC_CTYPE,"Russian");
    node *l,*k,*r,*rl;
    int n=1,i,w;
    cout<<"Введите число: ";
    cin>>w;
    k=new node;
    k->link=NULL;
    k->info=w;
    l=r=k;
    cout<<"Введите число: ";
    cin>>w;
    while(!feof(stdin))
    {
                        k=new node;
                        k->link=r; 
                        k->info=w;
                        r=k;
                        n++;
                        cout<<"Введите число: ";
                        cin>>w;
    }
    cout<<"Построенный стек: "<<endl;
    k=r;
    while(k!=NULL)// далее идет поиск наиболее часто встреч-ся значения
        {
        cout<<k->info<<" ";
        k=k->link;
        }
    k=r;int maxinfo;
    while(k!=NULL)
    {
    int max=0; maxinfo=k->info; int kol=0; rl=k;
        while(rl!=NULL)
        {
            if(k->info == rl->info)kol++;
            rl = rl->link;
        }
                    if(kol>max)
                {
                    max=kol; maxinfo=k->info;
                }
 
    }k=k->link;
 
[B]сюда вписать удаление[/B]
    
    cout<<endl<<"Стек после удаления наиболее часто встречающихся элементов: "<<endl;
    k=r;
    while(k!=NULL)
        {
                   cout<<k->info<<" ";
                   k=k->link;
        }
    cout<<endl;
    system("pause");
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mecid
 Аватар для Mecid
678 / 227 / 4
Регистрация: 15.10.2007
Сообщений: 1,247
06.04.2009, 20:20     Односвязные списки, стек #2
C++
1
2
3
4
5
6
7
8
9
void f(struct node*p){
p->info=0;
delete p->link;
}
void NodeDelete(struct node*p){
if(p==NULL) return 0;
NodeDelete(p->link);
f(p);
}
не проверял но чтото типа этого
Feldor
0 / 0 / 0
Регистрация: 15.03.2009
Сообщений: 22
07.04.2009, 16:15  [ТС]     Односвязные списки, стек #3
к сожалению у мну не пашет, совсем((, может еще кто подскажет??
Feldor
0 / 0 / 0
Регистрация: 15.03.2009
Сообщений: 22
10.04.2009, 20:22  [ТС]     Односвязные списки, стек #4
помогите пожалуйста, кто-нибудь((
Gravity
 Аватар для Gravity
556 / 550 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
10.04.2009, 22:51     Односвязные списки, стек #5
Вариант на Си.
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
#include <stdio.h>
#include <stdlib.h>
 
typedef struct list {
    int number;
    struct list *next;
} List;
 
List *addlist(List *, int);
int findnums(List *, int *);
void printlist(List *, int);
List *dellist(List *, int);
 
main()
{
    int num, delnum, k;
    List *np;
    
    np = NULL;
    printf("Enter nums:\n");
    /* заполнение списка числами */
    while(scanf("%d", &num) != EOF)
       np = addlist(np, num);
    /* печать значений списка */
    printf("\nList:\n");
    printlist(np, 0);
    
    delnum = findnums(np, &k);   /* поиск самых встречаемых значений */
    while(k-- > 0)
       np = dellist(np, delnum);   /* удаление этих значений из списка */
    /* печать нового списка */
    printf("\nNew list:\n");
    printlist(np, 0);
    
    system("pause");
    return 0;
}
 
/* добавляет элемент списка */
List *addlist(List *np, int num)
{
    if(np == NULL) {
       if( (np = (List *)malloc(sizeof(*np))) == NULL) {
          printf("error: can't allocate memory for element of list\n");
          return NULL;
       }
       np->number = num;
       np->next = NULL;
    } else
       np->next = addlist(np->next, num);
    return np;
}
 
/* ищет самое часто встречаемое значение*/
int findnums(List *list, int *k)
{
    List *p, *q;
    int tmpnum,   //значение
        freqnum,  //макс. встречаемое значение
        nfreq,    //сколько раз встретилось значение 
        maxfreq = 0;   //максимальное число "встреч" на одно значение
    
    if(list == NULL)
       return EOF;
    for(p = list; p != NULL; p = p->next) {
       tmpnum = p->number;  
       nfreq = 0;
       for(q = list; q != NULL; q = q->next)
          if(tmpnum == q->number)
             nfreq++;
       if(nfreq > maxfreq) {
          *k = maxfreq = nfreq;
          freqnum = tmpnum;
       }
    }
    return freqnum;
}
       
/* удаляет элемент списка, в котором содержится значение num */
List *dellist(List *list, int delnum)
{
    List *p_cur, *p_prev = NULL;       
       
    for(p_cur = list; p_cur != NULL; p_prev = p_cur, p_cur = p_cur->next)
       if(p_cur->number == delnum) {
          if(p_prev == NULL) {
             p_prev = p_cur->next;
             free(p_cur);
             return p_prev;
          } else {
             p_prev->next = p_cur->next;
             free(p_cur);
             return list;
          }
       }
}
 
/* выводит список */
void printlist(List *np, int i)
{    
    if(np != NULL) {
       printf("#%d: %d\n", i, np->number);
       printlist(np->next, ++i);
    }
}
Экзешник.
Вложения
Тип файла: rar List.rar (6.5 Кб, 53 просмотров)
Feldor
0 / 0 / 0
Регистрация: 15.03.2009
Сообщений: 22
12.04.2009, 14:26  [ТС]     Односвязные списки, стек #6
не работает.( вот мой вариант(только вот почему-то не удаляет ) :
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
#include <iostream>
using namespace std;
struct node{
       int info;
       node *link;
};
       
int main(){
    setlocale(LC_CTYPE,"Russian");
    node *l,*k,*r,*rl;
    int n=1,i,w, maxinfo;
    cout<<"Введите число: ";
    cin>>w;
    k=new node;
    k->link=NULL;
    k->info=w;
    l=r=k;
    cout<<"Введите число: ";
    cin>>w;
    while(!feof(stdin))
    {
                        k=new node;
                        k->link=r; 
                        k->info=w;
                        r=k;
                        n++;
                        cout<<"Введите число: ";
                        cin>>w;
    }
    cout<<"Построенный стек: "<<endl;
    k=r;
    while(k!=NULL)
        {
        cout<<k->info<<" ";
        k=k->link;
        }
    k=l;
    while(k!=NULL)
    {   int max=0, maxinfo=0, kol=0; rl=k;
 
        while(rl!=NULL)
        {
            if(k->info == rl->info)kol++;
            rl = rl->link;
        }
                    if(kol>max)
                {
                    max=kol; maxinfo=k->info;
                }
 
    }k=k->link;
    cout<<"Наиболее часто встреч-ся эл-т: "<< maxinfo <<endl;
    cout<<endl<<"Стек после удаления наиболее часто встречающихся элементов: "<<endl;
    k=r;
    while(k!=NULL)
        {
                   cout<<k->info<<" ";
                   k=k->link;
        }
    cout<<endl;
    system("pause");
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.04.2009, 14:46     Односвязные списки, стек
Еще ссылки по теме:

C++ Односвязные списки (очередь)
Односвязные списки: как работают? C++
Односвязные и двусвязные списки C++
Односвязные линейные списки C++
Односвязные линейные списки C++

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

Или воспользуйтесь поиском по форуму:
Feldor
0 / 0 / 0
Регистрация: 15.03.2009
Сообщений: 22
13.04.2009, 14:46  [ТС]     Односвязные списки, стек #7
ой, не посмотрел что скинул((
Yandex
Объявления
13.04.2009, 14:46     Односвязные списки, стек
Ответ Создать тему
Опции темы

Текущее время: 05:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru