Форум программистов, компьютерный форум, киберфорум
Наши страницы

C для начинающих

Войти
Регистрация
Восстановить пароль
 
Кармелио
0 / 0 / 0
Регистрация: 10.12.2012
Сообщений: 17
#1

Динамические структуры данных - C (СИ)

11.12.2012, 06:28. Просмотров 807. Ответов 0
Метки нет (Все метки)

Структура содержит фамилию, год рождения. Добавлять новые записи так, чтобы список был упорядочен по алфавиту.

Имееться в С++ необходимо переписать в Си


#include<cstdlib>
#include <iostream>
using namespace std;
structspis {
charfam[20]; // фамилия
intyyyy; // год
structspis *pred; // pred – указательнапредыдущуюструктуру
structspis *next;}; // next – указатель на следующую структуру

void create(void); // создание
void list(spis *); // просмотр
void del(void); // удаление
void add(void); // добавление

structspis *head, // указатели на начало и конец списка
*tail;

int main(intargc, char *argv[])
{
system("chcp 1251 >nul"); //пишем по-русски
system("CLS");
cout<< "Сейчас начнётся создание списка\n";
create();
cout<< "Просмотр списка, начиная с начала\n";
list(head); // просмотр с начала списка
cout<< "Просмотр списка, начиная с конца\n";
list(tail); // просмотр с конца списка
cout<< "Удаление элемента\n";
del();
cout<< "Просмотр списка, начиная с начала\n";
list(head);
cout<< "Добавление\n";
add(); // добавить элемент по алфавиту
cout<< "Просмотр списка, начиная с начала\n";
list(head);
free(head);
system("PAUSE");
}

void create(void) {
spis *p,*pred; // текущий и предыдущийэлементы
charx = '0'; // закончить или продолжить ввод
pred=NULL; // поканетэлементов
do { p=(spis *)malloc(sizeof(spis));
cout<< "Фамилия: "; cin>> p->fam;
cout<< "Год: "; cin>> p->yyyy;
p->pred=pred;
if (pred != NULL) // есть ли предыдущий элемент
pred->next=p;
else
head=p; // илинет
pred=p;
cout<< "Закончить - <0><Enter>"
<<endl
<< "Продолжить - <A-Z><Enter>: ";
cin>> x; }
while (x!='0');
tail=p; // хвост - новый созданный элемент
tail->next=NULL; // нет следующего элемента после хвоста
}

voidlist(spis *p) {
if (p==head) // перебирать с головы списка
while (p != NULL) {
cout<< p->fam<< " " << p->yyyy<<endl;
p=p->next; }
else if (p==tail) // перебирать с хвоста
while ( p!= NULL) {
cout<< p->fam<< " " << p->yyyy<<endl;
p=p->pred; }
else // если нет ни одного элемента
cout<< "Неверныйадрес " <<endl;
system("PAUSE");
}

void del(void) {
spis *p,*temp;
charf[20]; // строка для удаляемой фамилии
cout<< "Фамилия: "; cin>>f;
p=head; // голова списка
while (p!=NULL) {
if (strcmp((p->fam),f)==0) {// если найдена заданная фамилия
if (p==head) { // если найденная запись - первая
head=p->next;
head->pred=NULL;
free(p);
p=head; }
elseif (p==tail) { // если найденная запись - последняя
tail=p->pred;
tail->next=NULL;
free(p);
p=tail; }
else { // удаление из середины списка
p->next->pred=p->pred;
p->pred->next=p->next;
temp=p;
p=p->next;
free(temp); } }
else // если заданная фамилия не найдена – продвигаемся по списку
p=p->next; }
}

void add(void) {
spis *p, *pn;
intx = 0; // условие выхода из while
pn=(spis *)malloc(sizeof(spis));
cout<< "Фамилия: "; cin>>pn->fam;
cout<< "Год: "; cin>>pn->yyyy;
p = head;
while (p!=NULL&&x==0) { // ищем первую фамилию, у которой первый символ
if ((p->fam[0]) > (pn->fam[0])) // больше, чем у нового элемента
x=1;
else
p=p->next; }; // продвигаемся по списку
if (p==head) { // если найденная запись - первая
pn->pred=NULL;
pn->next=p;
p->pred=pn;
head=pn; }
else {
if (p==NULL) { // если все элементы перебрали
pn->pred=tail;
pn->next=NULL;
tail->next=pn;
tail=pn; }
else { // добавление в середину списка
pn->pred=p->pred;
pn->next=p;
p->pred->next=pn;
p->pred=pn; }
}
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.12.2012, 06:28
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Динамические структуры данных (C (СИ)):

Динамические структуры данных: деревья - C (СИ)
Задание Составить программу на языке Си для построения и обработки дерева общего вида или упорядочного двоичного дерева, содержащего...

Задача на Указатели и динамические структуры данных - C (СИ)
Дана задача: Записи содержат фамилию, год рождения. Добавлять новые записи так, чтобы список был упорядочен по возрасту. Помогите...

Динамические структуры данных. Ошибки в функциях - C (СИ)
Как я понял я запутался в указателях на типы данных при объявлении, или вызове функции. Помогите разобраться, всю голову сломал... Вот...

Загвоздка с деревом, динамические структуры данных - C (СИ)
Всем доброго времени суток. Столкнулся с такой проблемой. В языке С новичок и нужно написать программу с динамическими структурами...

Динамические структуры данных. Создание списков - C (СИ)
Собственно задание: В проекте создать однонаправленный список. Разбить список на два. Точка разрыва - указанный элемент. Вообще не могу...

Динамические структуры - C (СИ)
#include &lt;stdio.h&gt; #include &lt;locale.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; #include &lt;iostream&gt; #define N 2 #define...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.12.2012, 06:28
Привет! Вот еще темы с ответами:

Динамические структуры ошибка - C (СИ)
#include &quot;stdafx.h&quot; #include &quot;stdio.h&quot; #include &quot;conio.h&quot; #include &quot;malloc.h&quot; typedef struct listnode { int data; struct...

Переписать программу под динамические структуры - C (СИ)
Люди нужны ваши навыки !!=) Вот эта программа рекурсии, она рабочая, а мне нужно сделать ее через Динамические структуры(типо malloc,...

Динамические структуры: проверить баланс круглых скобок в тексте - C (СИ)
Доброе время суток.Помогите пожалуйста с след. заданием. Условие: Дан текст.Проверить баланс круглых скобок в нем,если скобки...

Динамические структуры - Проверить, лицо женского или мужского пола - C (СИ)
Всем привет. Пытаюсь разобраться с динамическими структурами. Дан файл в котором есть список людей, во втором файле создана структура list,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru