Академический Документы
Профессиональный Документы
Культура Документы
Каразина
Факультет компьютерных наук
Харьков
2020
Условие задания:
Для хранения набора целых чисел реализовать 4 варианта структур данных:
1. Стек – массив
2. Стек – ОЛС
3. Очередь – массив
4. Очередь – ОЛС
5. Выход
1. Вставить
2. Удалить
3. Распечатать
4. Показать верхний
5. Очистить
6. Проверить, пусто ли
7. Выход из пункта
int main(){
int choice,flag=0;
int
stackListCounter=0,rangeListCounter=0,stackArrayCounter=0,rangeArrayCo
unter=0; //Счётчики фактического количества элементов в массиве
int maxNumberOfElementsStackArray = 5,
maxNumberOfElementsRangeArray = 5; //Максимальное количество элементов
в массивах(при нехватке могут изменяться)
list *stackListHead = NULL;
list *rangeListHead = NULL;
int *stackArray =
(int*)calloc(maxNumberOfElementsStackArray,sizeof(int));
int *rangeArray =
(int*)calloc(maxNumberOfElementsRangeArray,sizeof(int));
while(1){
printf("1.Стек - массив\n2.Стек - ОЛС\n3.Очередь -
массив\n4.Очередь - ОЛС\n0.Выход\n");
scanf("%d", &choice);
switch(choice){
case 1:
system("cls");
while(1){
printf("1.Вставить(в конец)\n2.Удалить(из
конца)\n3.Распечатать\n4.Показать верхний\n5.Очистить\n6.Проверить,
пусто ли\n0.Выход из пункта\n");
scanf("%d", &choice);
switch(choice){
case 1:
stackArray =
add_element_to_end_array(stackArray,stackArrayCounter,&maxNumberOfElem
entsStackArray);
stackArrayCounter++;
break;
case 2:
if(stackArrayCounter == 0){
printf("Вы ещё не добавили
элементов!\n");
}else{
delete_element_from_end_stack_array(stackArray,stackArrayCounter);
stackArrayCounter--;
}
break;
case 3:
print_array(stackArray,maxNumberOfElementsStackArray);
break;
case 4:
show_upper_element_for_stack_array(stackArray,stackArrayCounter);
break;
case 5:
clear_array(stackArray,maxNumberOfElementsStackArray);
stackArrayCounter = 0;
break;
case 6:
if(stackArrayCounter==0){
printf("В стеке массива нет
элемент!\n");
}else{
printf("В стеке массива
есть элементы!\nКоличество: %d\n", stackArrayCounter);
}
break;
case 0:
flag=1;
break;
}
if(flag==1){
system("cls");
break;
}
}
flag=0;
break;
case 2:
system("cls");
while(1){
printf("1.Вставить(в начало)\n2.Удалить(из
начала)\n3.Распечатать\n4.Показать верхний\n5.Очистить\n6.Проверить,
пусто ли\n0.Выход из пункта\n");
scanf("%d", &choice);
switch(choice){
case 1:
if(stackListCounter==0){
init_list(&stackListHead);
}else{
add_element_to_begin(&stackListHead);
}
stackListCounter++;
break;
case 2:
if(stackListCounter==0){
printf("Вы ещё не добавили
элементов!\n");
}else{
delete_element_from_begin_list(&stackListHead);
stackListCounter--;
}
break;
case 3:
print_list(stackListHead);
break;
case 4:
show_upper_for_stack_list(stackListHead);
break;
case 5:
while(stackListCounter!=0){
delete_element_from_begin_list(&stackListHead);
stackListCounter--;
}
break;
case 6:
if(stackListCounter==0){
printf("В стеке списка нет
элементов\n");
}else{
printf("В стеке списка есть
элементы\nКоличество элементов: %d\n", stackListCounter);
}
break;
case 0:
flag=1;
break;
}
if(flag==1){
system("cls");
break;
}
}
flag=0;
break;
case 3:
system("cls");
while(1){
printf("1.Вставить(в конец)\n2.Удалить(из
начала)\n3.Распечатать\n4.Показать верхний\n5.Очистить\n6.Проверить,
пусто ли\n0.Выход из пункта\n");
scanf("%d", &choice);
switch(choice){
case 1:
rangeArray =
add_element_to_end_array(rangeArray,rangeArrayCounter,&maxNumberOfElem
entsRangeArray);
rangeArrayCounter++;
break;
case 2:
if(rangeArrayCounter==0){
printf("Вы ещё не добавили
элементов!\n");
}else{
rangeArray =
delete_element_from_begin_range_array(rangeArray,maxNumberOfElementsRa
ngeArray);
rangeArrayCounter--;
}
break;
case 3:
print_array(rangeArray,maxNumberOfElementsRangeArray);
break;
case 4:
show_upper_element_for_range_array(rangeArray,rangeArrayCounter);
break;
case 5:
clear_array(rangeArray,maxNumberOfElementsRangeArray);
rangeArrayCounter = 0;
break;
case 6:
if(rangeArrayCounter==0){
printf("В очереди массива
нет элементов!\n");
}else{
printf("В очереди массива
есть элементы\nКоличество элементов: %d\n", rangeArrayCounter);
}
break;
case 0:
flag=1;
break;
}
if(flag==1){
system("cls");
break;
}
}
flag=0;
break;
case 4:
system("cls");
while(1){
printf("1.Вставить(в конец)\n2.Удалить(из
начала)\n3.Распечатать\n4.Показать верхний\n5.Очистить\n6.Проверить,
пусто ли\n0.Выход из пункта\n");
scanf("%d", &choice);
switch(choice){
case 1:
if(rangeListCounter==0){
init_list(&rangeListHead);
}else{
add_element_to_end_list(&rangeListHead);
}
rangeListCounter++;
break;
case 2:
if(rangeListCounter==0){
printf("Вы ещё не добавили
элементов!\n");
}else{
delete_element_from_begin_list(&rangeListHead);
rangeListCounter--;
}
break;
case 3:
print_list(rangeListHead);
break;
case 4:
show_upper_for_range_list(rangeListHead);
break;
case 5:
while(rangeListCounter!=0){
delete_element_from_begin_list(&rangeListHead);
rangeListCounter--;
}
break;
case 6:
if(rangeListCounter==0){
printf("В очереди списка
нет элементов\n");
}else{
printf("В очереди списка
есть элементы\nКоличество элементов: %d\n", rangeListCounter);
}
break;
case 0:
flag=1;
break;
}
if(flag==1){
system("cls");
break;
}
}
flag=0;
break;
case 0:
return 0;
}
}
return 0;
}
*head = (list*)malloc(sizeof(list));
(*head)->pNext = NULL;
}
void add_element_to_begin(list **head){
list *temp;
temp = (list*)malloc(sizeof(temp));
temp->pNext = *head;
*head = temp;
}
while(temp!=NULL){
p = temp;
temp = temp->pNext;
}
temp = (list*)malloc(sizeof(list));
printf("Введите значение: ");
scanf("%d", &temp->num);
temp->pNext = NULL;
p->pNext = temp;
}
if((*head)->pNext == NULL){
free(*head);
(*head) = NULL;
return;
}
while(temp!=NULL){
printf("%-6d", temp->num);
temp = temp->pNext;
}
printf("\n");
}
if(head!=NULL){
printf("%d\n", head->num);
}
}
while(temp!=NULL){
p = temp;
temp = temp->pNext;
}
if(p!=NULL){
printf("%d\n", p->num);
}
}
int flag,i;
if(counter == *maxCounter){
arr = (int*)realloc(arr,((*maxCounter)*2)*sizeof(int));
*maxCounter *= 2;
for(i=counter ; i<(*maxCounter) ; i++){
arr[i] = 0;
}
}
while(1){
printf("Введите значение: ");
scanf("%d", &arr[counter]);
if(arr[counter]!=0){
break;
}else{
printf("Введите число не равное нулю!\n");
}
}
return arr;
}
int *p = &arr[1];
memcpy(arr,p,maxCounter*sizeof(int));
arr[maxCounter-1] = 0;
return arr;
}
int i;
for(i=0 ; i<maxCounter ; i++){
printf("%-7d", arr[i]);
}
printf("\n");
}
Откроем подпункт 1:
пункт 1:
значение: 1
пункт 3:
пункт 1:
значение: 2
пункт 1:
значение: 3
пункт 3:
пункт 4:
пункт 2:
пункт 3:
пункт 4:
пункт 5:
пункт 3:
пункт 6:
пункт 1:
значение: 1
пункт 1:
значение: 2
пункт 1:
значение: 3
пункт 3:
пункт 2:
пункт 3:
пункт 6:
пункт 4:
пункт 5:
пункт 3:
*ничего не печатает*
пункт 1:
значение: 1
пункт 1:
значение: 2
пункт 1:
значение: 3
пункт 3:
пункт 4:
пункт 2:
пункт 3:
пункт 6:
пункт 5:
пункт 3:
пункт 1:
значение: 1
пункт 1:
значение: 2
пункт 1:
значение: 3
пункт 3:
пункт 6:
пункт 4:
пункт 2:
пункт 3:
пункт 5:
пункт 3:
*ничего не печатает*