Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
metodichka_SI.doc
Скачиваний:
30
Добавлен:
23.02.2015
Размер:
2.05 Mб
Скачать

1 Задача

Записать в стек 3 целых числа и удалить их.

Файл <Stack.h>

# define STACK struct stack

STACK

{

int info;

STACK *next;

};

// добавление в стек нового элемента

void push(STACK **s, int item);

// изъятие элемента с «верхушки» стека

int pop(STACK **s, int *error);

// удалиение из стека элемента, который был записан последним

int peek(STACK **s, int *error);

// если в стеке имеется хотя бы один элемент, то error = 0

Файл «stack.cpp»

# include <stdio.h>

# include "stack.h"

STACK *s1,*s2;

void main()

{

int error;

// добавление в стек 1

push(&s1,1);

printf("peek(s1) = %d ", peek(&s1,&error));

// добавление в стек 2

push(&s1,2);

printf("peek(s1) = %d ", peek(&s1,&error));

// добавление в стек 3

push(&s1,3);

printf("peek(s1) = %d \n", peek(&s1,&error));

push(&s2,pop(&s1,&error));

push(&s2,pop(&s1,&error));

push(&s2,pop(&s1,&error));

printf("pop(&s2) = %d\n ", pop(&s2,&error));

printf("pop(&s2) = %d\n ", pop(&s2,&error));

printf("pop(&s2) = %d\n ", pop(&s2,&error));

}

«stack_fun.cpp»

#include <malloc.h>

#include "stack.h"

// добавление в стек нового элемента

void push(STACK **s, int item)

{

STACK *new_item;

new_item=(STACK *)malloc(sizeof(STACK));

new_item->info=item;

new_item->next=*s;

*s=new_item;

}

// взятие элемента с «верхушки» стека

int pop(STACK **s, int *error)

{

STACK *old_item=*s;

int old_info=0;

if (*s)

{

old_info = old_item -> info;

*s = (*s)->next;

free(old_item);

* error = 0;

}

else

*error = 1;

return (old_info);

}

//удаление из стека элемента

int peek(STACK **s, int *error)

{

if (*s)

{

*error =0;

return (*s)->info;

}

else

{

*error = 1;

return 0;

}

}

Комментарий:

Стек – это специальная область памяти, котороая предоставляет собой очередь типа “последний пришел – первый ушел”. Элемент добавленный в стек последним, будет вынут из него первым.

2 Задача

Реализовать стек в виде списка.

Файл <Stack.h>

// описание структуры типа - стек

typedef struct node

{

int info;

struct node*next;

}Node;

// задание типа указателя на структуру стек

typedef Node* List;

// инициализация стека

void InitializeList(List*plist);

// проверка пусты стека

bool ListEmpty(List plist);

// функция добавления одного элемента в стек

bool AddItem(int x,List*plist);

//печать всех элементов стека

void PrintList(List plist);

«stack.cpp»

#include<stdio.h>

#include<stdlib.h>

#include"stack.h"

void main()

{

List m;

char ch;

int x;

InitializeList(&m);

puts("Do you want to put element?");

ch=getchar();

while(ch=='y')

{

scanf("%d",&x);

AddItem(x,&m);

puts("Do you want to put element?");

getchar();

ch=getchar();

}

PrintList(m);

}

«stack_fun.cpp»

#include<stdio.h>

#include<stdlib.h>

#include"stack.h"

void InitializeList(List*plist)

{

*plist=NULL;

}

bool ListEmpty(List plist)

{

if(plist==NULL)

return true;

else

return false;

}

bool AddItem(int x, List* plist)

{

Node *p_new;

p_new=(Node*)malloc(sizeof(Node));

if(p_new==NULL)

return false;

p_new->info=x;

p_new->next=*plist;

*plist=p_new;

return true;

}

void PrintList(List plist)

{

Node *p_curr=plist;

if(ListEmpty(plist)==true)

printf("List is empty");

else

{

while(p_curr!=NULL)

{

printf("%d\n",p_curr->info);

p_curr=p_curr->next;

}

}

}

Самостоятельная работа

Разработать программу вычисления многочлена

в точке .

Лабораторная работа №17

Работа с абстрактными типами данных. Очередь. Двусвязный список.

Цель: закрепление на практике знаний работы с очередью и двухсвязным списком.

Методические рекомендации: лабораторная работа рассчитана на 2 часа и состоит из анализа двух разобранных заданий и решения самостоятельной работы.

Обязательное зачетное задание.

Необходимый уровень знаний.

  • работа с указателями;

  • работа со структурами.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]