С Новым годом! Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
1 / 1 / 0
Регистрация: 20.10.2013
Сообщений: 141
1

Нужно вместо добавления/удаления добавить стек и очередь

29.05.2014, 23:11. Показов 928. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Имеется список, нужно вместо добавления/удаления добавить стек и очередь

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
#include "stdlib.h"
#include "stdio.h"
#include "string.h"
#include "conio.h"
#include <iostream>
using namespace std;
 
 struct Car{
    int year;
 
 };
struct List{
    Car c;
    List* next;
};
 
void Print(List *b){
    List *print = b;
    while (print){
        printf("%d ->", print->c.year );
        print = print->next;
    }
    printf("NULL\n");
}
 
void Init(List **begin){   
    *begin = (struct List*)malloc(sizeof(struct List)); 
    Car c[5] = { 1969 , 1978, 1980, 2008, 2111 };
    (*begin)->c.year = 1900;
    (*begin)->next = NULL;
    List *end = *begin;   //вспомогат переменная ук-ль ,хранит адрес последн. эл-а списка
    for (int i = 0; i < 5; i++){
        end->next = (struct List*)malloc(sizeof(struct List));
        end = end->next;   //перенаправили ук-ль
        end->c = c[i];
        end->next = NULL;
    }
 
}
 
void Add_begin(List **begin,const  Car &c)
{
    List *t = (List*)malloc(sizeof(struct List));
    t->c = c;
    t->next = *begin;
    *begin = t;
}
 
void Insert(List **begin, const Car &c){
    List *ins = (List*)malloc(sizeof(struct List));
    ins->c = c;
    if (*begin == NULL){
        ins->next = NULL;
        *begin = ins;
        return;
    }
 
    List *t = *begin;
    if (t->c.year >= ins->c.year){
        ins->next = t;
        *begin = ins;
        return;
    }
    List *t1 = t->next;
    while (t1){
        if (t->c.year < ins->c.year && ins->c.year <= t1->c.year){
            t->next = ins;
            ins->next = t1;
            return;
        }
        t = t1;
        t1 = t1->next;
    }
    t->next = ins;
    ins->next = NULL;
 
}
 
void Delete(List**begin, const Car&c){
    if (*begin == NULL){
        return;
    }
    List *t = *begin;
    if (t->c.year == c.year){
        *begin = t->next;
        delete t;
        return;
    }
    List *t1 = t->next;
    while (t1){
        if (t1->c.year == c.year)
        {
            t->next = t1->next;
            delete t1;
            return;
        }
        t = t1; 
        t1 = t1->next;
    }
}
 
void Free(List **begin){
    if (*begin == 0) return;
    List *p = *begin;
    List *t;
    while (p){
        t = p;
        p = p->next;
        delete t;
    }
    *begin = NULL;
 
}
 
int main(){
    setlocale(LC_ALL, "Russian");
    List *begin = NULL;
    Car c = { 2000 }, b = { 56 };
    Init(&begin);
    Print(begin);
    Insert(&begin,c);
    Print(begin);
    Delete(&begin, c);
    Print(begin);
    Add_begin(&begin, c);
    Print(begin);
    Free(&begin);
    getch();
 
}
Добавлено через 4 часа 30 минут
Очень , очень нужна помощь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.05.2014, 23:11
Ответы с готовыми решениями:

сайт php с базой на localhost (Нужно добавить возможность удаления - добавления в базу)
Всем доброго дня и с наступающим! Делаю курсовую &quot;сайт php с базой MySQL на localhost&quot; Не могу...

Написать функции для добавления/удаления элемента в очередь
Помогите пожалуйста написать написать программу, реализующую работу очереди использую простые...

Циклическая очередь, сбой после удаления/добавления элемента
нарушается после того как удаляю элемент, и добавляю элемент снова Организуйте циклическую...

Напишите функции для добавления/удаления элемента в стек
помогите написать пожалуйста программу, реализующую работу стека. Напишите функции для...

6
1 / 1 / 0
Регистрация: 20.10.2013
Сообщений: 141
02.06.2014, 21:11  [ТС] 2
апну что-ли тему. Мб кто подскажет наипростейший пример реализации стека и очереди на базе списков
0
153 / 148 / 66
Регистрация: 20.02.2014
Сообщений: 556
02.06.2014, 22:04 3
MrSmitt,
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
#include <stdio.h>
#include <stdlib.h>
 
typedef struct _stack
{
    int value;
    struct _stack *next;
} stack;
 
typedef struct _queue
{
    int value;
    struct _queue *prev, *next;
} queue;
 
stack *s_head;
queue *q_head, *q_tail;
 
void push(int);
int  pop(void);
void enqueue(int);
int  dequeue(void);
 
int main(void)
{
    printf("Stack:\n");
    for(int i = 0; i < 10; ++i)
        push(i + 2 * i);
    for(int i = 0; i < 10; ++i)
        printf("%d ", pop());
    printf("\nQueue:\n");
    for(int i = 0; i < 10; ++i)
        enqueue(i + 2 * i);
    for(int i = 0; i < 10; ++i)
        printf("%d ", dequeue());
}
 
void push(int value)
{
    stack *tmp = malloc(sizeof(*tmp));
    if(!tmp) return;
 
    tmp->value = value;
    tmp->next = s_head;
    s_head = tmp;
}
 
int pop(void)
{
    int value = -255;
    if(s_head)
    {
        stack *tmp = s_head;
        value = tmp->value;
        s_head = s_head->next;
        free(tmp);
    }
    return value;
}
 
void enqueue(int value)
{
    queue *tmp = malloc(sizeof(*tmp));
    if(!tmp) return;
 
    tmp->value = value;
    tmp->next = tmp->prev = NULL;
 
    if(q_tail)
    {
        tmp->next = q_tail;
        q_tail->prev = tmp;
        q_tail = tmp;
    }
    else q_tail = q_head = tmp;
}
 
int dequeue(void)
{
    int value = -255;
    
    if(q_head)
    {
        value = q_head->value;
        if(q_head == q_tail)
        {
            free(q_head);
            q_head = q_tail = NULL;
        }
        else 
        {
            queue *tmp = q_head;
            q_head = q_head->prev;
            free(tmp);
        }
    }
    return value;
}
0
1 / 1 / 0
Регистрация: 20.10.2013
Сообщений: 141
02.06.2014, 23:45  [ТС] 4
Правильно понимаю, что программа выводит сначала удаленные эл-ы из стэка , а потом из очереди? Т.е. без исходного добавления
0
153 / 148 / 66
Регистрация: 20.02.2014
Сообщений: 556
03.06.2014, 00:20 5
MrSmitt, что значит без исходного добавления? А push и enqueue для чего? Сначала с помощью этих функций добавляются элементы, затем вытаскиваются.
0
1 / 1 / 0
Регистрация: 20.10.2013
Сообщений: 141
03.06.2014, 10:11  [ТС] 6
Цитата Сообщение от Вованя Посмотреть сообщение
MrSmitt, что значит без исходного добавления? А push и enqueue для чего? Сначала с помощью этих функций добавляются элементы, затем вытаскиваются.
Программа выводит на экран только "вытолкнутые элементы" ведь так?
0
153 / 148 / 66
Регистрация: 20.02.2014
Сообщений: 556
03.06.2014, 11:38 7
Цитата Сообщение от MrSmitt Посмотреть сообщение
Программа выводит на экран только "вытолкнутые элементы" ведь так?
Так трудно в мейне разобраться? По два цикла на очередь и на стек, один вставляет, второй вытаскивает и печатает, чего тут еще может быть непонятного то?
0
03.06.2014, 11:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.06.2014, 11:38
Помогаю со студенческими работами здесь

Реализовать простой стек, с функциями добавления и удаления элементов
Реализовать простой стек на си, с функциями добавления в стек и удаления из него, а также проверки...

Создать очередь, написать функции для добавления/удаления элементов
Добрый. Помогите, пожалуйста. Задание: Разработать функции, позволяющие: 1)создать очередь;...

Реализовать стек с двумя очередями используя массивы (операции удаления, добавления)
Очень вас прошу! Программа по С++! Нужно реализовать стек с помощью двух очередей используя...

Программа для добавления удаления каталогов в реестре, вместо reg
Просто править иногда приходится много в тхт,reg, вот, что бы, просто вписал, то что нужно...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru