Динамические структуры |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Динамические структуры |
brut03 |
Сообщение
#1
|
Группа: Пользователи Сообщений: 9 Репутация: 0 |
Здравствуйте, если не сложно, то помогите пожалуйста...
Записи содержат фамилию спортсмена, вид спорта, количество очков. Добавлять новые записи так, чтобы они были упорядочены по убыванию очков. Необходимо cформировать на паскале двухсвязный список и вывести на печать информацию. Зараннее благлдарен... -------------------- Бывает в жизни так хреново
Что даже чай не лезит в глотку А лезит в глотку только пиво Которым запиваеш водку |
volvo |
Сообщение
#2
|
Гость |
brut03
Эта задача очень похожа на твою предыдущую задачу... Вот очень простое решение: Код Type TType = Record name: String[20]; sport: String[20]; score: integer; End; Type PTListItem = ^TListItem; TListItem = Record Val: ^TType; prev, next: PTListItem; End; Function CreateItem(Var T: TType; ptPrev, ptNext: PTListItem): PTListItem; Var item: PTListItem; Begin New(item); New(item^.Val); item^.Val^ := T; item^.Prev := ptPrev; item^.Next := ptNext; CreateItem := item End; Procedure DeleteItem(Var p: PTListItem); Begin Dispose(p^.Val); Dispose(p); p := nil End; Type TList = Record First, Last: PTListItem; End; Procedure Create(Var List: TList); Begin List.First := nil; List.Last := nil; End; Procedure Destroy(Var List: TList); Var p, pt: PTListItem; Begin pt := List.First; While pt <> nil Do Begin p := pt; pt := pt^.next; DeleteItem(p) End; List.First := nil; List.Last := nil End; Procedure PrintList(Var List: TList); Var pt: PTListItem; Begin pt := List.First; While pt <> nil Do Begin With pt^.Val^ Do WriteLn(name:25, sport:25, score:10); pt := pt^.next End End; Procedure InsertFirst(Var List: TList; Var T: TType); Var pt: PTListItem; Begin pt := CreateItem(T, nil, List.First); If List.First = nil Then List.Last := pt Else List.First^.prev := pt; List.First := pt End; Procedure AppendLast(Var List: TList; Var T: TType); Var pt: PTListItem; Begin pt := CreateItem(T, List.Last, nil); If List.First = nil Then List.First := pt Else List.Last^.next := pt; List.Last := pt End; Procedure InsertBefore(Var List: TList; Var T: TType; p: PTListItem); Var ToAdd: PTListItem; Begin If (p = nil) or (p^.Prev = nil) Then InsertFirst(List, T) Else Begin ToAdd := CreateItem(T, p^.Prev, p); p^.Prev^.Next := ToAdd; p^.Prev := ToAdd; End; End; Function FindPlace(Var List: TList; value: Integer; Var wasFound: Boolean): PTListItem; Var pt: PTListItem; Begin FindPlace := nil; WasFound := False; pt := List.First; While pt <> nil Do If pt^.Val^.score > value Then pt := pt^.next Else Begin wasFound := True; FindPlace := pt; Exit End; End; Var Rec: TType; noMore: Boolean; List: TList; ToInsert: PTListItem; Found: Boolean; Begin Create(List); Repeat Write('name > '); ReadLn(Rec.name); noMore := Rec.Name = ''; If not noMore Then Begin Write('sport > '); ReadLn(Rec.sport); Write('score > '); ReadLn(Rec.score); If List.First = nil Then InsertFirst(List, Rec) Else Begin ToInsert := FindPlace(List, Rec.score, Found); If Found Then InsertBefore(List, Rec, ToInsert) Else AppendLast(List, Rec) End; PrintList(List) End; Until noMore; PrintList(List); Destroy(List) End. |
brut03_ |
Сообщение
#3
|
Гость |
Огромное Сасибо volvo
|
Текстовая версия | 11.01.2025 22:39 |