Соединить два стека в один - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Есть два стека, необходимо соединить эти стеки в один. Вот сделал, но выводиться в стеки3 только первый стек.
#include "stdio.h"
#include <conio.h>
#include <locale.h>
#include <stdlib.h>
#include <string.h>

int pop (int steck[]);
void push (int *steck,int x);
int two_steck(int steck1[], int steck2[], int steck3[]);

int steck1[100], top=-1; 
int steck2[100];
int steck3[200];
 
int pop (int steck[]) {
    int r=0;
    r=steck[top];
    top--;
  return r;
}
 
void push (int *steck,int x) {
    top++;
    steck[top]=x;
}
int two_steck(int steck1[], int steck2[], int steck3[]){
    top++;
    memcpy(steck3, steck2, 100); // Копирует из второго стека в третий в первые 100 эл.
    memmove(steck3+100, steck3, 100); // перемещает данные второго стека в конец
    memcpy(steck3, steck1, 100); // копирует в начало третьего первый
 
    return steck3[top];
}

int main () {
    int i, j, x, x2, y, y2, N;
    
    printf("Количество елементов в стеки:");  
    scanf ("%d", &N);
    
    printf("\nЕлементы первого стека:");
    for(i=0; i<N ;i++){
       scanf ("%d",&x);
       push (steck1,x);
    }
    
    printf("Первый стек:");
    for(j=0; j<N ;j++){
       y=pop (steck1);
       printf("%d ", y);
    }
    
    printf("\n\nЕлементы второго стека:\n");
    for(i=0; i<N ;i++){
      scanf ("%d",&x2);
      push (steck2,x2);
    }
    
    printf("Второй стек:");
    for(j=0; j<N ;j++){
           y2=pop (steck2);
           printf("%d ", y2);
    }
    
   printf("Новый стек:");
 
     for(i=0; i<N;i++){  
        two_steck(steck1,steck2,steck3);
        printf("%d\t", steck3[i]);
     }
 
    return 0;
}
Пробывал через указатель, но всеравно не работает.
void two_steck(int*steck1,int size1,int *steck2,int size2)
{
    int*r=steck3;
    for(int i=0;i<size1;i++,r++,steck1++)
        *r=*steck1;
    for(int i=0;i<size2;i++,r++,steck2++)
         *r=*steck2;
}

Решение задачи: «Соединить два стека в один»

textual
Листинг программы
void two_steck(int*steck1,int size1,int *steck2,int size2)
{
    int*r=steck3;
    for(int i=0;i<size1;i++,r++,steck1++)
        *r=*steck1;
    for(int i=0;i<size2;i++,r++,steck2++)
         *r=*steck2;
}

Объяснение кода листинга программы

В данном коде реализуется функция two_steck, которая объединяет два стека в один.

  1. В первую очередь, мы объявляем переменную r, которая будет обозначать вершину нового стека (steck3).
  2. Затем, в первом цикле for, мы копируем элементы из первого стека (steck1) в новый стек (r).
  3. Во втором цикле for, мы копируем элементы из второго стека (steck2) в новый стек (r).
  4. В конце функции, r содержит последний элемент нового стека.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.889 из 5
Похожие ответы