Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Трудность с применением указателей

48K
10 мая 2009 года
Him_G
4 / / 05.05.2009
Добрго Вам времени суток!

Помогите разобраться с программой. Вот ее код на языке СИ (Borland СИ):
Код:
// Разработать программу слияния двух стеков, содержащих
// возрастающую последовательность целых положительных чисел,
// в третий стек так, чтобы его элементы располагались
// также в порядке возрастания.


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

//=== *** === *** === *** === *** ===
struct stack
   {
       char cifra;
       struct stack *NextPtr;
   };

typedef stack Stack;
typedef Stack *StackPtr;

struct stack m1, *p1 = &m1;
struct stack m2, *p2 = &m2;
struct stack m3, *p3 = &m3;
struct stack m4, *p4 = &m4;


// --------------------------------------------
void Push (StackPtr *BeginPtr, char znachenie)    // внесение цифр в стек
   {
       while (znachenie != ".")
       {
         StackPtr NewPtr;
         NewPtr = (Stack*)malloc(sizeof(Stack));

       if (NewPtr != NULL)
          {
              NewPtr->cifra = znachenie;
                NewPtr->NextPtr = (*BeginPtr);
              (*BeginPtr) = NewPtr;
          }
          else
             printf("Ne mogu vvesti znachenie v stack");
        }
   }


// --------------------------------------------
char Pop(StackPtr *BeginPtr)     // удаление значения из стека
   {
       char popznachenie;
       StackPtr tempPtr;
       tempPtr = (*BeginPtr);
       popznachenie = (*BeginPtr)->cifra;
       (*BeginPtr) = (*BeginPtr)->NextPtr;
       free(tempPtr);

       return popznachenie;
   }


// --------------------------------------------
   void main()
      {
          int znachenie_1, znachenie_2;
          printf("Dlya ostanovki zikla vvoda vvedite tochku");
          printf("Vvedite zifru v 1-y stack");
          scanf("%d", &znachenie_1);
            Push (*p1 , znachenie_1);

          printf("Vvedite zifru vo 2-y stack");
          scanf("%d", &znachenie_2);
          Push (*p2 -> BeginPtr, znachenie_2);

          while (((*p1 -> BeginPtr) && (*p2 -> BeginPtr)) != NULL)
             {
                 if ((*p1 -> BeginPtr) == NULL)       // если первый стек пустой
                    Push (*p3 -> BeginPtr, Pop(*p2 -> BeginPtr));  // внести в 3-й содержимое 2-го стека
                 if ((*p2 -> BeginPtr) == NULL)      //если второй стек пустой
                    Push (*p3 -> BeginPtr, Pop(*p1 -> BeginPtr));  // внести в 3-й содержимое 1-го стека


                 if ((Pop(*p1 -> BeginPtr)) >= (Pop(*p2 -> BeginPtr)))  // если удаляемое значение 1-го стека >= знач. 2-го стека
                   {
                      Push (*p3 -> BeginPtr, Pop(*p1 -> BeginPtr));  // записать в 3-й сперва из 1-го стека
                      Push (*p3 -> BeginPtr, Pop(*p2 -> BeginPtr));  // затем записать в 3-й из 2-го стека
                   }
                 else
                   {
                      Push (*p3 -> BeginPtr, Pop(*p2 -> BeginPtr));  // записать в 3-й сперва из 2-го стека
                      Push (*p3 -> BeginPtr, Pop(*p1 -> BeginPtr));  // затем записать в 3-й из 1-го стека
                   }
             }

          // Извлечь из 3-го и внести в 4-й, т.е. менять порядок элементов в стеке

          while (*p3 -> BeginPtr != NULL)   // пока 3-й стек не пустой
             Push (*p4 -> BeginPtr, Pop(*p3 -> BeginPtr);   // извлечь из 3-го и внести в 4-й стек
      }


У меня возникли трудности с переносом в функции указателей на структуры и вставляемые элементы.
Составлял программу пользуясь различной литературой, вот нестыковки и получаются.
В частности, как правильно описать функцию и как ее потом вызвать с использованием указателей. Плохо понимаю, поэтому, если не трудно, то напишите пример из программы и кратко пояснение к нему.

Помогите откорректировать программу.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог