Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Stack на C, имплементатия Stack'a на C 
:(
    Опции темы
Just_Girl
Дата 6.12.2007, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 6.8.2007

Репутация: нет
Всего: нет



Привет! Help!!! Есть ли у кого то имплементатия Stack'a u16 на C???  smile
PM MAIL   Вверх
Greeen
Дата 6.12.2007, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 710
Регистрация: 13.8.2006
Где: Петербург

Репутация: 7
Всего: 18



Цитата(Just_Girl @  6.12.2007,  15:05 Найти цитируемый пост)
имплементатия

 smile это что, модно сейчас так говорить?

Добавлено через 23 секунды
Куда ни плюнь везде одна имплементация


--------------------
Подпись больше не нужна
PM MAIL ICQ Skype   Вверх
Just_Girl
Дата 6.12.2007, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 6.8.2007

Репутация: нет
Всего: нет



Green << Не нуждаюсь в ваших комментах, нужна помощь!!!
PM MAIL   Вверх
baldina
Дата 6.12.2007, 23:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 32
Всего: 101



Мммм... давненько на С не приходилось. Даж интересно попробовать.

Такое пойдет? Стек простейший, на односвязном списке.
Остальное добавить по вкусу

Код

#include <stdio.h>
#include <stdlib.h>

typedef unsigned short u16;

typedef struct _node_u16 {
  u16 value;
  struct _node_u16 *prev;
} node_u16;

typedef struct {
  node_u16 *top;
} stack_u16;

void init (stack_u16 *s)
{
  s->top = NULL;
}

void push (stack_u16 *s, u16 value)
{
  node_u16 *node = malloc (sizeof (node_u16));
  node->value = value;
  node->prev = s->top;
  s->top = node;
}

void pop (stack_u16 *s)
{
  if (s->top)
  {
    node_u16 *n = s->top;
    s->top = s->top->prev;
    free (n);
  }
}

int is_empty (stack_u16 *s)
{
  return s->top == NULL;
}

u16 top (stack_u16 *s)
{
  if (! is_empty(s))
    return s->top->value;
  else 
    return -1;
}

stack_u16 *new_stack_u16 (void)
{
  stack_u16 *s = malloc (sizeof (stack_u16));
  init (s);
  return s;
}

void delete_stack_u16 (stack_u16 *s)
{
  while (!is_empty (s))
    pop (s);
  free (s);
}

int main (void)
{
  u16 i;

  stack_u16 *s = new_stack_u16 ();

  for (i=0; i < 20; ++i)
    push (s, i);

  while (! is_empty (s))
  {
    printf ("%u\n", top(s));
    pop(s);
  }

  delete_stack_u16 (s);
}



Это сообщение отредактировал(а) baldina - 6.12.2007, 23:52
PM MAIL   Вверх
Just_Girl
Дата 7.12.2007, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 6.8.2007

Репутация: нет
Всего: нет



Извиняюсь, что не написала подробней... Речь идет о stack'e сделанном из array's.... Так как я делаю игру в которой мне надо сравнивать номера танцев двух зверюшек. smile  И я хотела танцы одного зверька в stack и танцы другово, а потом поп() и сравнить их smile
PM MAIL   Вверх
baldina
Дата 7.12.2007, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 32
Всего: 101



> сделанном из array's
зачем? какого именно? т.е. с каким интерфейсом? Если речь идет просто о С arrays, то надо заранее определиться, известен ли максимальный размер массива (и соотв. стека). Если он известен, все очень просто.

Танцы зверюшек это круто. Нельзя ли поподробней? В какой момент появляются номера танцев, можно ли их сравнивать сразу, зачем их вообще сравнивать. Не исключено, что есть более простой и изящный путь, чем использование стека.

Почему именно массив? Если уже есть некий массив, в котором искомые номера хранятся, почему нельзя выполнить сравнение непосредственно, не прибегая к промежуточному хранению данных?

Это сообщение отредактировал(а) baldina - 7.12.2007, 17:49
PM MAIL   Вверх
baldina
Дата 7.12.2007, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 32
Всего: 101



Ну вот была минутка, получилось и с массивом известной длины. 

Код

#include <stdio.h>
#include <stdlib.h>

typedef unsigned short u16;

#define MAX_STACK_SIZE  100

typedef struct {
  u16 array[MAX_STACK_SIZE];
  int pointer;
} stack_u16;

void init (stack_u16 *s)
{
  s->pointer = -1;
}

void push (stack_u16 *s, u16 value)
{
  if (s->pointer < MAX_STACK_SIZE-1)
    s->array[++s->pointer] = value;
}

void pop (stack_u16 *s)
{
  if (s->pointer >= 0)
    --s->pointer;
}

int is_empty (stack_u16 *s)
{
  return s->pointer == -1;
}

u16 top (stack_u16 *s)
{
  if (! is_empty(s))
    return s->array[s->pointer];
  else 
    return -1;
}

int main (void)
{
  u16 i;

  stack_u16 s;
  init (&s);

  for (i=0; i < 20; ++i)
    push (&s, i);

  while (! is_empty (&s))
  {
    printf ("%u\n", top(&s));
    pop(&s);
  }

  return 0;
}

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0468 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.