Код: Выделить всё
#include <stdio.h>
#include <conio.h>
#include <process.h>//для очистки экрана
#include <iostream.h>
#include <windows.h>// для поддержки русского
char* Rus(const char* text);
char bufRus[255];
struct STACK //описание структуры переменной содержащей информационное и адресное пространство
{int info;
STACK *Next;};
STACK *head=NULL;
//Формирование стека
void func1(STACK **);
//Вывод содержимого стека
void func2(STACK *);
//Добавление элемента в конец стека
void func3(STACK **);
//Удаление элемента из начала стека
void func4(STACK **);
void func5(STACK **); // выполнение задания
void main (void)
{
int n, i;
while (1)
{
printf(Rus("\nФормирование стека - 1\n"));
printf(Rus("\nПросмотр - 2\n"));
printf(Rus("\nДобавление элемента в конец стека - 3\n"));
printf(Rus("\nУдаление элемента из начала стека - 4\n"));
printf(Rus("\nВыполнение задания - 5\n"));
printf(Rus("\nВыход - 0\n"));
//*******************************************************
fflush(stdin);
switch(n=getchar())
{
case '1':
system("cls");
printf(Rus("\n Введи количество элементов в стеке\n"));
scanf("%d", &n);
srand(0);
for(i=1; i<=n; i++)
func1(&head);
system("pause");
system("cls");
break;
case '2':
system("cls");
//Просмотр непустого стека
func2(head);
system("pause");
system("cls");
break;
case '3':
func3(&head);
system("pause");
system("cls");
break;
case '4':
//Удаление элемента из начала стека
func4(&head);
system("pause");
system("cls");
break;
case '5':
func5(&head);
system("pause");
system("cls");
break;
case '0': exit(0);
default: printf(Rus("\nНет вида работы %c\n"),n); break;
}
}
}
char* Rus(const char* text)
{
CharToOem(text,bufRus);
return bufRus;
}
//Формирование стека
void func1(STACK **head){
//head - вершина стека
//t - текущий элемент
//Захват памяти под первый элемент
STACK* t=new STACK;
//t->info=rand()%100;
printf(Rus("\nВводи элемент стека\n\n"));
scanf("%d", &t->info);
t->Next=(*head); //Новый элемент указывает на головной
(*head)=t;
//Новый элемент становится гооловным
}
void func2(STACK *h){
system("cls");
printf("\n\n");
puts(Rus("\n***Содержимая информация***\n"));
if(!h){
printf(Rus("\nСписок пуст\n\n"));
exit(0);}
do{
printf("%p\n",h);
printf("%d\n\n",h->info);
h=h->Next; //вывод элемента и смещение по стеку
}while(h); //пока не достигнут конец стека
}
//Добавление элемента в конец стека
void func3(STACK **h){
system("cls");
if(!(*h)){
printf(Rus("\nСписок был пуст\n\n"));
func1(h);
return;}
STACK * current, *head;
STACK* t=new STACK;
t->Next=*h;
t->info=(*h)->info ;
head=*h;
*h=t;
do{
current=head->Next;
if(current){
head->info=current->info;
head=head->Next;}
else {
printf(Rus("\nВводи новый элемент стека\n\n"));
scanf("%d", &head->info);
head=head->Next;}
}while(head);
}
//Удаление элемента из начала стека
void func4(STACK **head){
STACK *current;
if(!*head) exit(0); //если стека нет
current=*head; //копия указателя на начало стека
*head=current->Next; //указатель на голову указывает на второй элемент
delete current; //удаляем головной элемент
printf(Rus("\nЭлемент удален\n\n"));
}
/* выполнение задания
Написать программу с функцией, которая вставляет в непустой целочисленный
стек новый такой же элемент перед каждым его вхождением в стек
*/