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

Очередь в линейном списке - C++

Восстановить пароль Регистрация
 
Ilyaa
20 / 20 / 3
Регистрация: 29.04.2012
Сообщений: 213
21.05.2012, 22:43     Очередь в линейном списке #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
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
#include <iostream>
 
struct data
{
    char *mas;
    struct data *next;
    struct data *next1;
} *first;
int i=1, j=0;
 
 
void qstore(char *buf)
{
    struct data *temp;
    if((temp=(data*)malloc(sizeof(data))) == NULL)
    {
        printf("Memory allocation error!\n");
        exit(0);
    }
    else
    {
        temp->mas=buf;
        temp->next=first;
        //if (i==1) temp->next1=first;
        first=temp;
    }
}
 
void enter()
{
  char s[256],*p;
  p=(char*)malloc(sizeof(char));
  do {
    printf("Enter element %d: ", i++);
    gets(s);
    if(*s==0) {i--; break;}
    p=(char*)malloc(strlen(s)+1);
    if(!p)
    {
      printf("\nMemory allocation error!\n");
      return;
    }
    strcpy(p,s);
    if(*s) qstore(p);
  } while(*s);
}
 
char* qretrieve()
{
    char *temp;
    struct data *del;
 
    if(first==NULL)
    {
        printf("Empty!\n");
        return(0);
    }
    else
    {
        temp=first->mas;
        del=first;
        first=first->next;
        free(del);
        //j++;
        i--;
        return(temp);
    }
}
 
void review()
{
    struct data *curr;
    int i1=i-1;
    curr=first;
    while(i1--)
    {
        printf("%d %s\n", i1+1,curr->mas);
        curr=curr->next;
    }
}
 
int main()
{
    char s[80];
    if((first=(data*)malloc(sizeof(data))) == NULL)
    {
        printf("Memory allocation error!\n");
        exit(1);
    }
 
     while(1)
  {
    printf("Enter (E), List (L), Delete (R), Quit (Q): ");
    gets(s);
    *s=toupper(*s);
 
    switch(*s) {
      case 'E':
        enter();
        break;
      case 'L':
        review();
        break;
      case 'R':
        qretrieve();
        break;
      case 'Q':
        exit(1);
    }
  }
 
    return 0;
}
В принципе все работает, кроме удаление элементов. Они должны удалятся по принципу FIFO, а получается FILO. Как перенаправить указатель, чтобы удаление происходило с конца, а не с начала?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.05.2012, 22:43     Очередь в линейном списке
Посмотрите здесь:

поиск элемента в линейном массиве C++
C++ Строка: Выделить вхождение отдельного символа их количество и хранить их вместе со счётчиком в линейном однонаправленом списке.
C++ Записи в линейном списке содержат ключевое поле типа int. Сформиро-вать двунаправленный список. Добавить в него элемент с заданным номером, удалить К
Ошибка в линейном списке C++
Программа которая определяет число элементов в линейном списке C++
C++ Записи в линейном списке содержат ключевое поле типа int. Сформировать двунаправленный список. Удалить из него
Удаление узла в линейном списке C++
C++ Почему сортируются цифры в линейном списке, а фамилии не сортируются

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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