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

Оставить в списке только первые вхождения одинаковых элементов - C++

Восстановить пароль Регистрация
 
Pips
0 / 0 / 0
Регистрация: 06.04.2011
Сообщений: 6
08.09.2011, 10:13     Оставить в списке только первые вхождения одинаковых элементов #1
В составе программы описать функцию, которая оставляет в списке только первые вхождения одинаковых элементов.

Добавлено через 10 минут
куку ))))
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.09.2011, 10:13     Оставить в списке только первые вхождения одинаковых элементов
Посмотрите здесь:

C++ Оставить в слове первые вхождения каждой буквы
C++ Оставить в словах только первые вхождения каждой буквы.
Оставить в словах только первые вхождения каждой буквы C++
C++ Оставить в слове только первые вхождения каждой буквы
Удалить из массива повторяющиеся элементы, оставив только их первые вхождения C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
08.09.2011, 10:16     Оставить в списке только первые вхождения одинаковых элементов #2
Твои наработки?
Pips
0 / 0 / 0
Регистрация: 06.04.2011
Сообщений: 6
08.09.2011, 10:42  [ТС]     Оставить в списке только первые вхождения одинаковых элементов #3
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
#include <iostream>
using namespace std;
 
void main()
{   struct node {   int info;
        struct node *next;
       };
    typedef node *NodePtr;  // указатель на тип node
    NodePtr head = NULL;
    NodePtr p;          // указатель на текущий элемент
    NodePtr tail;           // указатель на "хвост" очереди
    int N = 10;         // количество элементов в очереди
    int cnt = 1;            // счетчик элементов в очереди
 
    if (head == NULL)
    {   head = new node;
    head->info = cnt++; // или какому-то другому значению
    head->next = NULL;
    tail = head;
    }
    for (int i = 2; i<=N; i++)
    { p = new node;
    p->info = cnt++;
    tail->next = p;     // в данном случае - NULL
    p->next = NULL;
    tail = p;
    }
// Вывод очереди на экран
p = head;
for (i = 1; i<=N; i++)
    {   cout << p->info << ' ';
    p = p->next;
    }
cout <<endl;}
 Комментарий модератора 
Используйте теги форматирования кода

вот эту лабу сделал а ту не могу смысла не понимаю (
в этой задание (Программа формирования очереди из 10 элементов и вывода ее на экран. )вроде они из одной темы ))
заранее спасибо

Добавлено через 7 минут
я новичок в этом деле слегка не понимаю можешь просто помоч пожалуйста

Добавлено через 3 минуты
а потом я исправлюсь
Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
08.09.2011, 11:15     Оставить в списке только первые вхождения одинаковых элементов #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
#include <stdio.h>
#include <stdlib.h>
 
#define FREE(PTR) free(PTR), (PTR) = NULL
 
struct node
{
    int data;
    struct node* next;
};
 
struct queue
{
    struct node* head;
    struct node* tail;
};
 
void create(struct queue*);
void delete(struct queue*);
void enqueue(struct queue*, int);
void unique(struct queue*);
int dequeue(struct queue*);
int empty(struct queue*);
void print(struct queue*);
 
int main(int argc, char* argv[])
{
    int i;
    int val;
 
    struct queue queue;
    
    if(argc == 1)
    fputs("No data\n", stderr), exit(1);
 
    create(&queue);
    
    for(i = 1; i < argc; ++i)
    {
    val = atoi(argv[i]);
    enqueue(&queue, val);
    }
    
    puts("Before removing duplicates:");
    print(&queue);
    unique(&queue);
    puts("After removing duplicates:");
    print(&queue);
    delete(&queue);
 
    exit(0);
}
 
void create(struct queue* l)
{
    l->head = l->tail = NULL;
}
 
void delete(struct queue* l)
{
    struct node* n;
    while(l->head != NULL)
    {
    n = l->head;
    l->head = l->head->next;
    FREE(n);
    }
}
 
void enqueue(struct queue* l, int elem)
{
    struct node* n;
    n = malloc(sizeof(struct node));
    n->data = elem;
    n->next = NULL;
    if(l->head == NULL)
    l->head = n;
    else
        l->tail->next = n;
    l->tail = n;
}
 
int dequeue(struct queue* l)
{
    struct node* n;
    int retval;
    n = l->head;
    if(n == NULL)
    abort();        /* тут обрабока случая с пустым списком */
    retval = n->data;
    l->head = l->head->next;
    FREE(n);
    return retval;
}
 
void unique(struct queue* l)
{
    struct node *p, *q, *last;
    p = l->head;
    while(p != NULL)
    {
    last = p;
    q = last->next;
    while(q != NULL)
    {
        if(q->data == p->data)
        {
        last->next = q->next;
        FREE(q);
        q = last->next;
        }
        else
        {
        last = q;
        q = q->next;
        }
    }
    p = p->next;
    }
}
 
int empty(struct queue* l)
{
    return l->head != NULL;
}
 
void print(struct queue* l)
{
    struct node* n;
    n = l->head;
    while(n != NULL)
    {
    printf("%d ", n->data);
    n = n->next;
    }
    
    putchar('\n');
}
Код
[nameless@desktop c]$ ./sample 1 2 3 4
Before removing duplicates:
1 2 3 4 
After removing duplicates:
1 2 3 4 
[nameless@desktop c]$ ./sample 2 2 2 2
Before removing duplicates:
2 2 2 2 
After removing duplicates:
2 
[nameless@desktop c]$ ./sample 1 2 3 3 2 4
Before removing duplicates:
1 2 3 3 2 4 
After removing duplicates:
1 2 3 4 
[nameless@desktop c]$
Обработку ошибочных ситуаций (невыделение памяти, удаление элементов из пустой очереди) сделаешь сам
Yandex
Объявления
08.09.2011, 11:15     Оставить в списке только первые вхождения одинаковых элементов
Ответ Создать тему
Опции темы

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