Соединить два стека в один - 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, которая объединяет два стека в один.
- В первую очередь, мы объявляем переменную r, которая будет обозначать вершину нового стека (steck3).
- Затем, в первом цикле for, мы копируем элементы из первого стека (steck1) в новый стек (r).
- Во втором цикле for, мы копируем элементы из второго стека (steck2) в новый стек (r).
- В конце функции, r содержит последний элемент нового стека.