Форум программистов, компьютерный форум CyberForum.ru

Сортировочный список! - C++

Восстановить пароль Регистрация
 
Owen04
 Аватар для Owen04
5 / 5 / 3
Регистрация: 25.12.2009
Сообщений: 144
20.05.2011, 20:12     Сортировочный список! #1
Здраствуйте!
Так случилось, что пропустил лекцию и не в курсе, как реализуюца списки!
А задание дали:
"Написать программу перестановки элементов сортировочного списка:
х(1),х(2),...х(n) => х(2),x(3)...х(n),x(1). Элементы пронумерованы в порядке их ввода"

Киньте мне функции списка:
Ввода
Вывода
удаление

и если есть перебора списка)

Добавлено через 3 часа 32 минуты
хоть пример списка киньте!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.05.2011, 20:12     Сортировочный список!
Посмотрите здесь:

Список: связный список, в котором информация о книгах сортируется по убыванию стоимости. C++
Двусвязный список (в конец двусвязного списка добавить другой список) C++
C++ 3 класса: список, стек(как список), очередь(как список)
list. Cоздать список из результатов(с массивами), а потом просмотреть весь список C++
C++ создать список л3 из элементов входящих и в список л1 и в список л2
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
 Аватар для lemegeton
2911 / 1340 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
20.05.2011, 22:00     Сортировочный список! #2
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
typedef int ValueType;
 
typedef struct Node {
  ValueType data;
  struct Node* next;
} Node;
 
typedef struct {
  size_t size;
  Node *first;
} List;
 
void ListInit(List *list) {
  list->size = 0;
  list->first = NULL;
}
 
void ListFree(List *list) {
  while (list->first != NULL) {
    Node *next = list->first->next;
    free(list->first);
    list->first = next;
  }
  list->size = 0;
}
 
void ListPushBack(List *list, ValueType value) {
  Node *node = (Node*)malloc(sizeof(Node));
  node->next = NULL;
  node->data = value;
  if (list->first == NULL) {
    list->first = node;
  } else {
    Node *last = list->first;
    while (last->next != NULL)
      last = last->next;
    last->next = node;
  }
  ++list->size;
}
 
ValueType ListPopFirst(List *list) {
  ValueType result = list->first->data;
  Node *second = list->first->next;
  free(list->first);
  list->first = second;
  return result;
  --list->size;
}
 
void ListPrint(List *list) {
  Node *node;
  for (node = list->first; node != NULL; node = node->next)
    printf("%4d", node->data);
  printf("\n");
}
 
void DoTask(List *list) {
  Node *last = list->first;
  while (last->next != NULL)
    last = last->next;
  last->next = list->first;
  list->first = list->first->next;
  last->next->next = NULL;
}
 
int main(int argc, char *argv[]) {
  srand(time(NULL));
  size_t i;
  List list;
  ListInit(&list);
 
  for (i = 0; i < 10; ++i)
    ListPushBack(&list, rand() % 100);
 
  ListPrint(&list);
  DoTask(&list);
  ListPrint(&list);
 
  ListFree(&list);
  return 0;
}
Owen04
 Аватар для Owen04
5 / 5 / 3
Регистрация: 25.12.2009
Сообщений: 144
20.05.2011, 23:43  [ТС]     Сортировочный список! #3
А что она делает??? а то не запускаеться... ((
вот я нашел примерчик, как примерно надо)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#include <iostream.h>
 
struct node
{
 int num;
 node *next;
};
 
node* toList(node* ,int);
node* fromList(node*, int );
void printList(node*);
 
void main()
{
 int what,i,n;
 node *head=0;
 
 cout<<"input n=";
 cin>>n;
 cout<<endl;
 
 
 cout<<"input all what"<<endl;
 for (i=1;i<=n;i++)
 {
   cin>>what;
   head= toList(head ,what);
  }
 
 printList(head);
 
 cout<<"InputWhatFromList:"<<endl;
 cin>>what;
 head=fromList(head,what);
 
 printList(head);
 }
 
node* toList(node* head ,int num)
{
 node* pv=new node;
 
 pv->num=num;
 pv->next=0;
 if (head)
 {
    node* cur=0;
   if(head->num> pv->num)
   {
     pv->next=head;
     head=pv;
   }
   else
   {
     cur=head;
     while((cur->next) && (cur->next->num < pv->num))
    cur=cur->next;
     pv->next=cur->next;
     cur->next=pv;
    }
  }
 else
   head=pv;
 return head;
 }
 
 
node* fromList(node* head, int num)
{
   int  prdel;
   node* erased=0;
   node* cur=0;
   node* buf=new node;
   buf->num=num;
   buf->next=0;
   if (( head->num) == (buf->num))
   {
      erased=head;
      head=head->next;
      delete erased;
   }
   else
   {
    cur=head;
    erased=cur->next;
    prdel=0;
    do
     {
      if ( buf->num==erased->num)
    {
     cur->next=erased->next;
     delete erased;
     prdel=1;
    }
      else
    {
      cur=erased;
      erased=cur->next;
    }
     }
 
    while  ((prdel==0) ||(erased != 0));
 }
 return head;
}
 
void printList(node* pv)
{
  if (!pv)
    cout<<"List is nil\n";
  else
    while(pv)
   {
     cout<<"="<<pv->num<<endl;
     pv=pv->next;
    }
}
lemegeton
 Аватар для lemegeton
2911 / 1340 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
20.05.2011, 23:48     Сортировочный список! #4
Какую ошибку пишет? На какой строке (приведите номер и текст на строке)? Какой компилятор?
Owen04
 Аватар для Owen04
5 / 5 / 3
Регистрация: 25.12.2009
Сообщений: 144
21.05.2011, 15:31  [ТС]     Сортировочный список! #5
Borland C++ 3.1

ошибок нет, просто не запускает...
Конечно спасибо тебе, но это сложная прога

C++
1
2
3
#include <time.h>
 
typedef int ValueType;
мы никогда не пользуемся(((
C++
1
2
3
4
5
6
7
8
9
typedef struct Node {
  ValueType data;
  struct Node* next;
} Node;
 
typedef struct {
  size_t size;
  Node *first;
} List;
нужно через одну
C++
1
2
3
4
5
struct node
{
 int num;
 node *next;
};
Evredinka
 Аватар для Evredinka
5 / 5 / 1
Регистрация: 13.03.2011
Сообщений: 14
21.05.2011, 19:59     Сортировочный список! #6
простое создание списка:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
struct List
{
    int data;
    List *next;
};
typedef List* Listptr;
int _tmain(int argc, _TCHAR* argv[])
{
    char ans;
    int x, el, poz, i;
    Listptr head, temp_ptr, temp, after_me;             //заголовок
    head = new List;                                    //первый узел
    
    ans='y';
    temp_ptr = new List;
    head->next=temp_ptr;
    
    while((ans=='y')||(ans=='Y'))                       //ввод списка
    {
        cout<<"Enter your number:"<<endl;
        cin>>x;
        temp_ptr->data = x;
        temp = new List;
        temp_ptr->next=temp;
        temp->next=NULL;
        temp_ptr=temp;
        cout<<"Repeat?"<<endl;
        cin>>ans;
    }
    temp_ptr=head->next;
    
    cout<<"Your list of numbers consists of:"<<endl;        //вывод списка
    while(temp_ptr->next != NULL)
    {
        cout<<temp_ptr->data<<" ";
        temp_ptr = temp_ptr->next;
    }
Owen04
 Аватар для Owen04
5 / 5 / 3
Регистрация: 25.12.2009
Сообщений: 144
22.05.2011, 13:06  [ТС]     Сортировочный список! #7
"Написать программу перестановки элементов сортировочного списка:
х(1),х(2),...х(n) => х(2),x(3)...х(n),x(1). Элементы пронумерованы в порядке их ввода"

Добавлено через 48 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
 
struct node
{
 int num;
 node *next;
};
 
node *Fun(node*, int&);
node* toList(node* ,int);
void printList(node*);
 
void main()
{
 clrscr ();
 int what,i,n;
 node *head=0;
 cout<<"input n=";
 cin>>n;
 cout<<endl;
 cout<<"input all what"<<endl;
 for (i=1;i<=n;i++)
 {
   cin>>what;
   head= toList(head ,what);
  }
 
 printList(head);
 cout<<endl;
 Fun(head, what);
 printList(head);
 getch();
 }
 node *Fun(node *head, int&X)
{
  node *pv;
  X=head->num;// х- сохраняет первый елемент
 if (head->next==head)
 {
  free(head);//потом удаляем голову
  head=NULL;
 }
  else
 {
  pv=head;
  head=head->next;
  head->next=pv->next;
  free(pv);
  }
 return head;
}
 
node* toList(node* head ,int num)
{node* pv=new node;
 pv->num=num;
 pv->next=0;
 if (head)
 {
    node* cur=0;
   if(head->num> pv->num)
   {
     pv->next=head;
     head=pv;
   }
   else
   {
     cur=head;
     while((cur->next) && (cur->next->num < pv->num))
    cur=cur->next;
     pv->next=cur->next;
     cur->next=pv;
    }
  }
 else
   head=pv;
 return head;
 }
 
 
 
void printList(node* pv)
{
  if (!pv)
    cout<<"List is nil\n";
  else
    while(pv)
   {
     cout<<"="<<pv->num<<endl;
     pv=pv->next;
    }
}

нужно в конец вставить Х!! и я не знаю правильно ли перебирает

Добавлено через 12 часов 53 минуты
создавать список, сортировать его, потом первый элемент делать последним!
Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
22.05.2011, 13:13     Сортировочный список! #8
Цитата Сообщение от Owen04 Посмотреть сообщение
ошибок нет, просто не запускает...
http://www.cyberforum.ru/cpp-beginners/thread10807.html

Цитата Сообщение от Owen04 Посмотреть сообщение
Borland C++ 3.1
Поставь себе что-нибудь поновее
Evredinka
 Аватар для Evredinka
5 / 5 / 1
Регистрация: 13.03.2011
Сообщений: 14
22.05.2011, 14:53     Сортировочный список! #9
вроде как работает)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#include "stdafx.h"
#include <iostream>
#include "conio.h"
using namespace std;
 
struct List
{
    int data;
    List *next;
};
typedef List* Listptr;
void tolist (Listptr& head);
void create (Listptr& head);
void out (Listptr& head);
void replace (Listptr& head);
void sort (Listptr& head);
void swap (int& a, int& b);
 
int _tmain(int argc, _TCHAR* argv[])
{
    Listptr head;   
    head = new List;
    create (head);
    out (head);
    sort (head);
    out (head);
    replace (head);
    out (head);
    _getch();
    return 0;
}
void create (Listptr& head)
{
    Listptr temp, tempptr;
    int n, num;
    cout<<"Skol'ko chisel? ";
    cin>>n;
    cout<<"Vvedite "<<n<<" chisel: "<<endl;
    for (int i=0; i<n; i++)
    {
        cin>>num;
        if (i==0)
        {
            temp=new List;
            temp->data=num;
            head->next=temp;
            temp->next=NULL;
        }
        else
        {
            tempptr=new List;
            tempptr->data=num;
            temp->next=tempptr;
            tempptr->next=NULL;
            temp=tempptr;
        }
    }
}
void out (Listptr& head)
{
    Listptr temp;
    temp=head->next;
    cout<<"Your list of numbers consists of:"<<endl;
    while (temp->next != NULL)
    {
        cout<<temp->data<<" ";
        temp = temp->next;
    }
    cout<<temp->data<<endl<<endl;
}
void replace (Listptr& head)
{
    Listptr time, temp;
    time=new List;
    time->next=NULL;
    time->data=head->next->data;
    head->next=head->next->next;
    temp=head->next;
    while (temp->next!=NULL)
        temp=temp->next;
    temp->next=time;
}
void swap (int& a, int& b)
{
    int t;
    t=a;
    a=b;
    b=t;
}
void sort (Listptr& head)
{
    Listptr temp, time;
    int count=1;
    temp=head->next;
    while (temp->next!=NULL)
    {
        count++;
        temp=temp->next;
    }
    temp=head->next;
    for (int i=0; i<count; i++)
    {
        while (temp->next!=NULL)
        {
            if (temp->data>temp->next->data)
                swap (temp->data, temp->next->data);
            temp=temp->next;
        }
    temp=head->next;
    }
}
Owen04
 Аватар для Owen04
5 / 5 / 3
Регистрация: 25.12.2009
Сообщений: 144
22.05.2011, 18:11  [ТС]     Сортировочный список! #10
мда... я не гений программирования... ток учусь...
нихрена не ясно!
C++
1
2
3
4
5
6
7
#include "stdafx.h" зачем??
 
using namespace std; без него
 
int _tmain(int argc, _TCHAR* argv[]) ошибка
 
_getch();_tmain зачем _?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
22.05.2011, 18:14     Сортировочный список! #11
Owen04, Виндовское расширение...

нужно через одну
Мдааааа...
Owen04
 Аватар для Owen04
5 / 5 / 3
Регистрация: 25.12.2009
Сообщений: 144
22.05.2011, 18:26  [ТС]     Сортировочный список! #12
Согласен, что "Мдааа"!

Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#include <iostream.h>
#include <conio.h>
 
 
struct List
{
        int data;
        List *next;
};
typedef List* Listptr;
void tolist (Listptr& head);
void create (Listptr& head);
void out (Listptr& head);
void replace (Listptr& head);
void sort (Listptr& head);
void swap (int& a, int& b);
 
void main()
{       clrscr ();
        Listptr head;   
        head = new List;
        create (head);
        out (head);
        sort (head);
        out (head);
        replace (head);
        out (head);
        getch();
        
}
void create (Listptr& head)
{
        Listptr temp, tempptr;
        int n, num;
        cout<<"Skol'ko chisel? ";
        cin>>n;
        cout<<"Vvedite "<<n<<" chisel: "<<endl;
        for (int i=0; i<n; i++)
        {
                cin>>num;
                if (i==0)
                {
                        temp=new List;
                        temp->data=num;
                        head->next=temp;
                        temp->next=NULL;
                }
                else
                {
                        tempptr=new List;
                        tempptr->data=num;
                        temp->next=tempptr;
                        tempptr->next=NULL;
                        temp=tempptr;
                }
        }
}
void out (Listptr& head)
{
        Listptr temp;
        temp=head->next;
        cout<<"Your list of numbers consists of:"<<endl;
        while (temp->next != NULL)
        {
                cout<<temp->data<<" ";
                temp = temp->next;
        }
        cout<<temp->data<<endl<<endl;
}
void replace (Listptr& head)
{
        Listptr time, temp;
        time=new List;
        time->next=NULL;
        time->data=head->next->data;
        head->next=head->next->next;
        temp=head->next;
        while (temp->next!=NULL)
                temp=temp->next;
        temp->next=time;
}
void swap (int& a, int& b)
{
        int t;
        t=a;
        a=b;
        b=t;
}
void sort (Listptr& head)
{
        Listptr temp, time;
        int count=1;
        temp=head->next;
        while (temp->next!=NULL)
        {
                count++;
                temp=temp->next;
        }
        temp=head->next;
        for (int i=0; i<count; i++)
        {
                while (temp->next!=NULL)
                {
                        if (temp->data>temp->next->data)
                                swap (temp->data, temp->next->data);
                        temp=temp->next;
                }
        temp=head->next;
        }
}
я не много переделал, примерно было нужно так! Щас буду разбираться!
Evredinka
 Аватар для Evredinka
5 / 5 / 1
Регистрация: 13.03.2011
Сообщений: 14
22.05.2011, 19:19     Сортировочный список! #13
зачем _getch()?
Owen04
 Аватар для Owen04
5 / 5 / 3
Регистрация: 25.12.2009
Сообщений: 144
22.05.2011, 19:38  [ТС]     Сортировочный список! #14
Гг зачем я знаю getch())
C++
1
2
3
4
void main()
{       clrscr ();
          getch();   
}
я не знаю зачем "_getch();" ?
Evredinka
 Аватар для Evredinka
5 / 5 / 1
Регистрация: 13.03.2011
Сообщений: 14
22.05.2011, 19:42     Сортировочный список! #15
можно и вот так

void main()
{
_getch();
return 0;
}
Owen04
 Аватар для Owen04
5 / 5 / 3
Регистрация: 25.12.2009
Сообщений: 144
22.05.2011, 19:42  [ТС]     Сортировочный список! #16
Вот я под себя переделал... огромное спасибо))
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#include <iostream.h>
#include <conio.h>
struct node
{
    int num;
    node *next;
};
void toList(node* );
void printList(node* head);
void replace (node* head);
void sort (node* head);
void swap (int& a, int& b);
 
void main()
{       clrscr ();
        node *head=new node;
    toList( head );
        printList(head);
    sort (head);
    replace (head);
    printList(head);
    getch();
 
}
void toList(node* head )
{
    node* pv=new node;
    int n, what;
    cout<<"CKOLbKO ChiCEL? ";
    cin>>n;
    cout<<"BBEDITE "<<n<<" ChiCEL: "<<endl;
    for (int i=0; i<n; i++)
    { cin>>what;
       if (i==0)
        {
            pv->num=what;
            head->next=pv;
            pv->next=NULL;
        }
        else
        {       node* cur=new node;
                        cur->num=what;
            pv->next=cur;
            cur->next=NULL;
            pv=cur;
        }
    }
}
void printList(node* pv)
{
   pv=pv->next;
    while(pv!=NULL)
   {
     cout<<"="<<pv->num<<endl;
     pv=pv->next;
    }
    cout<<endl;
}
 
void replace (node* head)
{
    node* time,* temp;
    time=new node;
    time->next=NULL;
    time->num=head->next->num;
    head->next=head->next->next;
    temp=head->next;
    while (temp->next!=NULL)
        temp=temp->next;
    temp->next=time;
}
void swap (int& a, int& b)
{
    int t;
    t=a;
    a=b;
    b=t;
}
void sort (node* head)
{
    node* temp,* time;
    int count=1;
    temp=head->next;
    while (temp->next!=NULL)
    {
        count++;
        temp=temp->next;
    }
    temp=head->next;
    for (int i=0; i<count; i++)
    {
        while (temp->next!=NULL)
        {
            if (temp->num>temp->next->num)
                swap (temp->num, temp->next->num);
            temp=temp->next;
        }
    temp=head->next;
    }
}
"void sort (node* head)" - меняет местами???
а "void replace (node* head)" что делает??
Evredinka
 Аватар для Evredinka
5 / 5 / 1
Регистрация: 13.03.2011
Сообщений: 14
22.05.2011, 19:46     Сортировочный список! #17
sort - сортирует просто по возрастанию,
replace - ставит первый элемент в конец)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.05.2011, 19:50     Сортировочный список!
Еще ссылки по теме:

Сформировать список из 10 работников, используя динамическую структуру данных двусвязный список C++
C++ Сформировать список из 10 книг, используя динамическую структуру данных односвязный список
Написать программу "Железнодорожный сортировочный узел" C++

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

Или воспользуйтесь поиском по форуму:
Owen04
 Аватар для Owen04
5 / 5 / 3
Регистрация: 25.12.2009
Сообщений: 144
22.05.2011, 19:50  [ТС]     Сортировочный список! #18
Теперь я полностью врубился)))
Yandex
Объявления
22.05.2011, 19:50     Сортировочный список!
Ответ Создать тему
Опции темы

Текущее время: 15:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru