Разделы презентаций


Задача 1. Сформировать двунаправленный связанный список (очередь),содержащий

/*структурный тип для двунаправленного списка*/struct node2{int info;node2 *next,*prev;};node2* make (void){node2 *lst=NULL, *curr,*t_prev; int n;printf("Enter positive integers\n"); while(scanf("%d",&n)==1&&n>0) { tek=(node2*)malloc(sizeof(node2)); curr->info=n; if (!lst) //списка еще нет

Слайды и текст этой презентации

Слайд 1Задача 1. Сформировать двунаправленный связанный список (очередь),содержащий последовательность целых положительных

чисел, вводимых с клавиатуры.
Структура имеет вид:

число info ук. на след. next ук. на пред. prev
Используем указатели: lst – начало списка, curr – текущая запись, t_prev(temp previous) – предыдущая запись.
Исходные данные: 1 2 3 0. До цикла lst=NULL.








n=1 n=2 n=3 n=0

NULL

NULL

curr

curr

curr

t_prev

t_prev

t_prev

lst

Задача 1. Сформировать двунаправленный связанный список (очередь),содержащий последовательность целых положительных чисел, вводимых с клавиатуры.Структура имеет вид:

Слайд 2/*структурный тип для двунаправленного списка*/
struct node2
{
int info;
node2 *next,*prev;
};
node2* make (void)
{
node2

*lst=NULL, *curr,*t_prev;
int n;

printf("Enter positive integers\n");
while(scanf("%d",&n)==1&&n>0)
{

tek=(node2*)malloc(sizeof(node2));
curr->info=n;

if (!lst) //списка еще нет
{
lst=curr;
curr->prev=NULL;
}
else //не первый элемент
{
t_prev->next=curr;
curr->prev=t_prev;
}
t_prev=curr;
}
curr->next=NULL;
return lst;
}


Слайд 3// вывод двунаправленного списка на экран
void printlist_2(node2 *lst)
{ node2

*p,*t;

p=lst;
puts("forward");
while(p)
{
printf("%7d",p->info);
t=p;

p=p->next;
}
puts("\nback");
p=t;
while(p)
{
printf("%7d",p->info);
t=p; p=p->prev;
}
puts("");
}


Слайд 4Задача 2. В двунаправленный связанный список вставить число 2000 до

каждого элемента большего чем X1 и меньшего чем X2. Числа

x1 и x2 вводятся в главной функции. Функция возвращает указатель на начало измененного списка.

Используем указатели: lst – начало списка, tek – текущий, t – предшествующий tek, nov – новый. Рассматриваем два случая – вставка в начало списка и в середину списка.
tek t tek
lst


nov nov

NULL

NULL

2000

NULL

2000

Задача 2. В двунаправленный связанный список вставить число 2000 до каждого элемента большего чем X1 и меньшего

Слайд 5node2 * ins (node2 *lst, int x1, int x2)
{ node2

*tek,*nov,*t;
//указатель на текущий элемент
tek=lst;
while (tek!=NULL)
//если есть вставка

if (tek->info > x1 && tek->info < x2)
{ //выделение памяти
nov=(node2*)malloc(sizeof(node2));
nov->info=2000;
if (tek==lst)
{ //вставка в начало
lst=nov;
nov->next=tek;
nov->prev=NULL;
tek->prev=nov;
}

else
{ //вставка не в начало
t=tek->prev;
nov->next=tek;
t->next=nov;
tek->prev=nov;
nov->prev=t;
}
tek=tek->next;
}
else
tek=tek->next;
return(lst);
}

node2 * ins (node2 *lst, int x1, int x2){ node2 *tek,*nov,*t;//указатель на текущий элементtek=lst; while (tek!=NULL)

Слайд 6int main()
{
node2 *lst=NULL;
int n, x1,x2;
printf("input x1,x2");
scanf("%d%d",&x1,&x2);

lst=make();
puts("first list");
printspisok_2(lst);
lst=ins(lst,x1,x2);
puts("list after insert");
printspisok_2(lst);

return 0;
}

int main(){node2 *lst=NULL;int n, x1,x2;printf(

Слайд 7Рекурсия
В программировании рекурсия — вызов функции из нее же самой

непосредственно (простая рекурсия) или через другие функции (сложная или косвенная

рекурсия). Например, функция A вызывает функцию B, а функция B — функцию A. Количество вложенных вызовов функции называется глубиной рекурсии.

Пример рекурсивного определения - вычисление факториала


1, при n=0,
n!=
(n-1)!*n, при n - натуральном

Например:
4!=4*3!=4*3*2!=4*3*2*1!=4*3*2*1*0!=4*3*2*1*1

Рекурсия В программировании рекурсия — вызов функции из нее же самой непосредственно (простая рекурсия) или через другие

Слайд 8Выбор рекурсии или итерации зависит от конкретной задачи. В общем

случае рекурсия требует дополнительных расходов, так как она реализуется с

использованием стеков. Некоторые задачи элементарно решаются с использованием рекурсии (например, проверка правильности арифметических выражений).

/* Рекурсивный алгоритм вычисления факториала */
long fact(int n) {
if(n==0)return(1);
else return(n*fact(n-1));
}

/* Итерационный алгоритм вычисления факториала */ long fact(int n)
{
long p=1;
int i;
for(i=1;i<=n;p*=i++);
return (p);
}

Выбор рекурсии или итерации зависит от конкретной задачи. В общем случае рекурсия требует дополнительных расходов, так как

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика