Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.02.2018, 21:15   #1
Lucky_Vadim
Пользователь
 
Регистрация: 12.12.2017
Сообщений: 22
Сообщение Помогите написать функцию.Вывод последних N элементов списка

Здесь есть добавление элемента, вывод всего и очистка, а нужно еще вывод последних
Код:
#include "stdafx.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <stdio.h>
#include "list.h"

CListLast::CListLast()
{
	head=NULL;
}

CListLast::~CListLast()
{
	ReleaseList();
}

void CListLast::AddItem(char* s)
{
	struct list *newItem;
	newItem = new struct list;
	strcpy(newItem->info,s);
	if (head==NULL)
	{
		head=newItem;
		head->next = NULL;
	}
	else
	{
		newItem->next = head;
		head = newItem;
	}
}

void CListLast::DisplayList()
{
	char *s=new char[100];;
	char s1[10];
	struct list *p;
	p=head;
	strcpy(s,"");
	while (p!=NULL)
	{
		printf("%s->",p->info);
		p=p->next;
	}
	printf("NULL\n");
}

void CListLast::ReleaseList()
{
	if (head!=NULL)
	{
		struct list *p;
		while (head!=NULL)
		{
			p=head;
			head=head->next;
			delete p;
		}
		head=NULL;
	}
}
Lucky_Vadim вне форума Ответить с цитированием
Старый 20.02.2018, 03:52   #2
СтудПом
Форумчанин
 
Регистрация: 08.11.2017
Сообщений: 347
По умолчанию

Однако, совсем не видно main() прямо нигде...
СтудПом вне форума Ответить с цитированием
Старый 20.02.2018, 16:52   #3
Lucky_Vadim
Пользователь
 
Регистрация: 12.12.2017
Сообщений: 22
По умолчанию

Вот main.cpp
Код:
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include "list.h"
#include <stdio.h>
#include <conio.h>
#include <locale.h>
#include <stdlib.h>

int main()
{
	CListLast list;
	int key;
	char val[100];
	setlocale(0,"RUS"); 

	do
	{
		printf("\n\n1 - добавление элемента\n");
		printf("2 - вывод списка на экран\n");
      	printf("3 - очитска списка\n");
		printf("ESC - выход\n");
		printf("Ваш выбор: \n");
		key=getch();
		switch(key)
		{
		case '1':
			printf("Введите элемент списка: ");
			scanf("%s",val);
		    list.AddItem(val);
			break;
		case '2':
			list.DisplayList();
			break;
		case '3':
			list.ReleaseList();
			break;
		}
	}
	while(key!=27);
	return 0; 
}
а вот ***.h
Код:
class CListLast

{
	struct list
	{
	char info[100];
	struct list *next;
	};
struct list *head;

public:
	CListLast();
	~CListLast();
	void AddItem(char *);
	void DisplayList();
	void ReleaseList();
};
Lucky_Vadim вне форума Ответить с цитированием
Старый 20.02.2018, 17:15   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

у Вас список точно односвязный? в элементе есть ссылка на следующий элемент списка и всё? ссылки на предыдущий нет?
Тогда показать последние M записей можно только за два прохода.
проход 1 - считаем от head количество записей в count.
проход 2 - проходим от head, показываем те записи, у которых номер >= (count - M)

p.s. я, конечно, совсем не знаю С/С++
но не могу понять, зачем переменные в методе DisplayList() ?

разве так не будет работать?
Код:
void CListLast::DisplayList()
{
	struct list *p;
	p=head;
	while (p!=NULL)
	{
		printf("%s->",p->info);
		p=p->next;
	}
	printf("NULL\n");
}
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.02.2018, 20:09   #5
Lucky_Vadim
Пользователь
 
Регистрация: 12.12.2017
Сообщений: 22
По умолчанию

Мне нужно написать ещё одну ф-ию, чтобы я ввёл N и мне вывело последние количество N элементов списка, а ф-ия DisplayList() выводит весь список на экран.
Lucky_Vadim вне форума Ответить с цитированием
Старый 20.02.2018, 22:32   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Lucky_Vadim Посмотреть сообщение
Мне нужно написать ещё одну ф-ию, чтобы я ввёл N и мне вывело последние количество N элементов списка
да, я понял.


Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
у Вас список точно односвязный? в элементе есть ссылка на следующий элемент списка и всё? ссылки на предыдущий нет?
Тогда показать последние M записей можно только за два прохода.
проход 1 - считаем от head количество записей в count.
проход 2 - проходим от head, показываем те записи, у которых номер >= (count - M)
замените только M на N (я банально опечатался)
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Написать функцию, которая создает список L2, являющийся копией списка L1, начинающегося с данного узла Joinack Паскаль, Turbo Pascal, PascalABC.NET 1 14.11.2023 20:28
Вывод элементов выпадающего списка. Ankumo JavaScript, Ajax 5 11.07.2016 15:43
Написать на языке С++ описание данных для хранения списка и подпрограмму получения списка Т копированием в него элементов vikulyok Помощь студентам 0 12.05.2014 12:52
язык Си: написать функцию, которая ищет сумму модулей элементов Margana17 Помощь студентам 8 08.01.2014 23:37
c++ написать функцию удаления последнего элемента из списка scrinn Помощь студентам 0 04.06.2012 23:56