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


Динамические структуры данных

Пример. Ввести текст в динамическую память. Конец ввода – Ctrl+Z. Вводимые строки размещаются в динамической памяти, а их адреса запоминаются в массиве указателей text. В конце массива указателей заносится NULL для

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

Слайд 1Динамические структуры данных
Примером динамической структуры данных является связанный

список. Техника работы с ним предполагает в случае ввода новой

записи запрашивать дополнительный объем памяти, а при удалении записи - освобождать соответствующий участок памяти. Для организации динамических структур данных используются функции

- malloc() - выделить память,
- free() - освободить память,
прототипы которых находятся в файле .

При программировании задач подобного типа широко применяются указатели и массивы указателей.
Динамические структуры данных  Примером динамической структуры данных является связанный список. Техника работы с ним предполагает в

Слайд 2Пример. Ввести текст в динамическую память.
Конец ввода – Ctrl+Z.

Вводимые строки размещаются в динамической памяти, а их адреса запоминаются

в массиве указателей text. В конце массива указателей заносится NULL для последующего определения количества строк.
Пример. Ввести текст в динамическую память. Конец ввода – Ctrl+Z. Вводимые строки размещаются в динамической памяти, а

Слайд 3#include
#include
#include

void vvod(char *text[])
{
char buf[81]; // буфер

для ввода строки
while(gets(buf)!=NULL)
{
// выделение памяти для

cтроки и запоминание ее адреса
*text=(char*)malloc(strlen(buf)+1);
// копирование содержимого буфера в динамическую память
strcpy(*text++,buf);
}
*text=NULL;
}
#include #include #include void vvod(char *text[]){ char buf[81]; // буфер для ввода строкиwhile(gets(buf)!=NULL)  {  //

Слайд 4
Вызов функции: vvod(text1);
Параметр text1 определен следующим образом:
char *text1[100];

// т.е. массив указателей на строки

Пример. Освободить память, занятую введенным

текстом.
void freetext(char *text[]) // или void freetext(char **text)
{
while(*text!=NULL) free(*text++);
}
Вызов функции: vvod(text1);Параметр text1 определен следующим образом:  char *text1[100]; // т.е. массив указателей на строкиПример.

Слайд 5Пример. Сформировать стек, содержащий структуры книга:
Информация о книгах читается из

текстового файла.

Описание книги в файле занимает три строки:
в первой

строке расположены фамилия, имя и отчество автора, разделенные пробелами,
во второй строке – название,
в третьей – год издания
в четвертой – цена.

Книга

Автор

Название

Год

Цена

Отчество

Имя

Фамилия

Пример. Сформировать стек, содержащий структуры книга:Информация о книгах читается из текстового файла. Описание книги в файле занимает

Слайд 6#include
#include
#include
//структурный тип
struct book
{
struct

{
char fam[15],im[15],ot[15];

} author;
char title[81];
int year, price;
book *next;
//поле указателя
};

book *pushBook (char *filename);
/*прототип функции формирования списка*/
int main()
{
book *catalog ;
char filename[20];

printf("input file name: ");
gets(filename);
catalog=pushBook(filename);

return 0;
}

#include #include #include //структурный типstruct book  {  struct   {    char

Слайд 7/*У функции stackknig на входе filename - имя текстового файла

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

возвращаемое функцией - указатель на вершину стека.*/

book *pushBook (char *filename)
{ FILE *f; char *n;
book *uk, *stack=NULL;
if ((f=fopen(filename,"r"))==NULL)
{
printf("no such file");
exit(1);
}
while(!(feof(f)) )
{
uk=(book*)malloc(sizeof(book)); /* выделение памяти для текущей книги */
uk->next=stack;

stack=uk;
fscanf(f,"%s", uk->author.fam);
fscanf(f,"%s", uk->authtor.im);
fscanf(f,"%s", uk->authtor.ot);
while(getc(f)!='\n');
fgets(uk->title,81,f);
for(n=uk->title; *n!='\0';n++)
// удаление символа '\n'
if (*n=='\n') *n='\0';
fscanf(f,"%d", &uk->year);
fscanf(f,"%d",&uk->price);
}
fclose(f);
return(stack);
}


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

положительных чисел, вводимых с клавиатуры.
Исходные данные: 1 2 3 0.

Используем указатели: lst - вершина стека, first – первый элемент, curr(current) – текущий.

Возвращаем указатель first – адрес первого введенного элемента.

----

n = 1

n = 2

n = 3

n = 0

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

Слайд 9#include
#include

/* структурный тип для односвязного списка */
struct node
{
int

info;
node *next;
};

node *make (void)
{
node *lst=NULL, *curr, *first;
int n;
puts("Input positive integers");
/*

пока удается считать число, и оно положительное */
while(scanf("%d",&n)==1 && n>0)
{
curr=(node*)malloc(sizeof(node));
/* если список еще пуст */
if (!lst) first=curr;
curr->next=lst;
curr->info=n;
lst=curr;
}
first->next=lst;
return(first); /* вернем адрес последней записи */
}

Слайд 10/* вывод циклического списка на экран */

void print_sp(node *lst)
{ node

*p;
//указатель на текущую запись

p=lst;
if (lst)
{
do

{
p=p->next;
printf("%7d",p->info);
} while(p!=lst);
printf("\n");
}
else
puts("empty");
}

int main()
{
int x1=5;

node *lst=make();
puts("list");
print_sp(lst);
return 0;
}


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

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

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

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

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


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

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