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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.02.2012, 23:22   #1
VAAKAraceGUM
Новичок
Джуниор
 
Регистрация: 13.02.2012
Сообщений: 2
По умолчанию Восходящая сортировка связных списков слиянием.

Здравствуйте, мне дали задание сделать восходящую сортировку связного списка слиянием .
Собственно моя программа (создание двусвязного списка, добавление элемента в любое место, удаление из любого места, печать ) выглядит так :
PHP код:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
struct stack
{
    
int val;
    
struct stack next;
    
struct stack prev;
};
struct stack root;
struct stack last;
int add_val (int whereint posint kol);
int del_val (int posint kol);
void print_stack (unsigned int num);
int main ()
{
    
root = (struct stack *) malloc (sizeof (struct stack));
    
last root;
    
int count 0;
    
int pos;
    
int choise_where;
    
char choise;
    
    while (
choise != 'q')
    {
        
printf ("\nКоманды:\n");
        
printf ("\"a\" - добавление элемента в список;\n");
        
printf ("\"d\" - удаление элемента из списка;\n");
        
printf ("\"q\" - выход;\n");
        
printf ("Ваш выбор: ");
        
scanf (" %c", &choise);
        
        if (
choise == 'a')
        {
            
printf ("\nУкажите, как добавить: \n");
            
printf ("1) создать новый элемент\n");
            
printf ("2) после элемента\n");
            
printf ("3) перед элементом\n");
            
printf ("4) вместо элемента\n");
            
printf ("Ваш выбор: ");
            
scanf (" %d", &choise_where);
            
            if (
choise_where || choise_where 4)
            {
                
printf ("Нет такого варианта!\n");
                continue;
            }
            if (
choise_where != 1)
            {
                
printf ("Позиция (номер элемента): ");
                
scanf (" %d", &pos);
            }
            
count add_val (choise_whereposcount);
            
print_stack (count);
        }
        else if (
choise == 'd')
        {
            
printf ("Позиция, откуда удалить: ");
            
scanf (" %d", &pos);
            
count del_val (poscount);
            
print_stack (count);
        }
        else if (
choise == 'q') return 0;
        else 
printf ("Нет такого варианта!\n");
    }
    return 
0;
}
int add_val (int whereint posint kol)
{
    
int valueiter;
    
struct stack *ptr_one, *ptr_two;
    
struct stack *nov = (struct stack*) malloc (sizeof (struct stack));
    
    
printf ("Значение (целое число): ");
    
scanf (" %d", &value);
    
ptr_one root;
    if (
where == 1)
    {
        
last->val value;
        
last->next nov;
        
nov->prev last;
        
last last->next;
        return ++
kol;
    }
    
    if (
pos kol || pos 1)
    {
        
printf ("Ошибка, нет %d-ого элемента!\n"pos);
        return 
kol;
    }
    for (
iter 1iter positer++)
        
ptr_one ptr_one->next;
    if (
where == 2)
    {
        
nov->val value;
        
ptr_two ptr_one->next;
        
ptr_one->next nov;
        
nov->prev ptr_one;
        
nov->next ptr_two;
        
ptr_two->prev nov;
        return ++
kol;
    }
    if (
where == 3)
    {
        
nov->val value;
        if (
pos == 1root->prev = (struct stack*) malloc (sizeof (struct stack));
        
ptr_two ptr_one->prev;
        
ptr_one->prev nov;
        
nov->next ptr_one;
        
nov->prev ptr_two;
        
ptr_two->next nov;
        if (
pos == 1root nov;
        return ++
kol;
    }
    if (
where == 4)
        
ptr_one->val value;
        
    return 
kol;
}
int del_val (int posint kol)
{
    
int iter;
    
struct stack *ptr;
    
ptr root;
    if (
pos kol || pos 1)
    {
        
printf ("Ошибка, нет %d-ого элемента!\n"pos);
        return 
kol;
    }
    for (
iter 1iter positer++)
        
ptr ptr->next;
    if (
pos == 1)
    {
        
root root->next;
        
free (root->prev);
    }
    else if (
pos == kol)
    {
        
last last->prev;
        
free (last->next);
    }    
    else
    {
        (
ptr->prev)->next ptr->next;
        (
ptr->next)->prev ptr->prev;
        
free (ptr);
    }
    return --
kol;
}
void print_stack (unsigned int num)
{
    
int go;
    if (
num == 0)
    {
        
printf ("\nСПИСОК ПУСТ!\n");
        return;
    }
    
printf ("\nСПИСОК: ");
    
struct stackout root;
    for (
go 0go numgo++)
        {
        
printf ("%d "out->val);
        
out out->next;
        }
    
printf ("\n");

Соответственно, мне надо сделать эту злополучную Восходящую сортировку связного списка слиянием.Помогите плз, а то я чет не до конца понимаю как тут эту сортировку организовать...
VAAKAraceGUM вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка слиянием C++ PinkPink Помощь студентам 0 05.12.2011 20:07
Сортировка слиянием C++ PinkPink Помощь студентам 3 10.10.2011 22:44
Сортировка слиянием Aндрей Общие вопросы C/C++ 3 15.04.2010 09:47
Сортировка слиянием maxflint Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 05.12.2009 20:41