Модуль для реализации списка целых чисел с текущим элементом - C#
Формулировка задачи:
Описать модуль для реализации списка целых чисел с текущим элементом . Предусмотреть выполнение действий над списком :
1 ) Начать работу .
2 ) пуст остаток списке?
3 ) Встать к началу списка .
4 ) Перейти к следующему элементу .
5 ) Текущий элемент .
6 ) Вставить элемент .
7 ) Удалить элемент .
Используя этот модуль , составить подпрограммы : присвоение для списков Let (L1 , L2 ) и вычисления длины списка Len ( L ) ;
Помогите пожалуйста, разобраться. Что представляет собой модуль? Как решать эту задачу? С чего вообще начинать?) Помогите, хоть алгоритм понять.
Решение задачи: «Модуль для реализации списка целых чисел с текущим элементом»
textual
Листинг программы
Модуль роботи із списком з поточним елементом у Сі складається з 2 файлів: listcur.h та listcur.c.
/* listcur.h */
typedef struct lelem *lref; /* Вказівник на елемент списку */
struct lelem { /* Елемент списку */
int d;
lref next;
};
typedef struct { /* Список */
lref beg, cur;
} list;
extern void init(list *pl); /* Почати роботу */
extern int emp_end(list l); /* Чи порожній залишок списку?*/
extern void first(list *pl); /* Встати до початку списку */
extern void next(list *pl); /* Перейти до наступного елемента */
extern int current(list l); /* Поточний елемент */
extern void insert(list *pl, int n);/* Вставити елемент */
extern void delete(list *pl); /* Видалити елемент */
/* listcur.c */
#include <stdio.h>
#include <stdlib.h>
#include "listcur.h"
lref find_prev(list l)
{
lref p;
if (l.beg == l.cur) p=NULL;
else
{
p = l.beg;
while (p -> next != l.cur)
p = p ->next;
}
return p;
}
.................
void insert(list *pl, int n)
{
lref p;
p = (lref) malloc(sizeof(struct lelem));
p -> d = n;
p -> next = pl -> cur;
/* Рис. 10.21 а), в) */
if(pl -> beg == pl -> cur) pl -> beg = p; /* Рис. 10.21 б) */
else find_prev(*pl) -> next = p; /* Рис. 10.21 г) */
}
void delete(list *pl)
{
lref p;
if(pl -> cur == NULL)
{
printf("delete: список порожній\n");
exit(1);
}
p = pl -> cur;
if(pl -> beg == p) pl -> beg = pl -> cur -> next; /* Рис. 10.22 а) */
else find_prev(*pl) -> next = pl -> cur -> next; /* Рис. 10.22 в) */
pl -> cur = pl -> cur -> next;
free(p);
/* Рис. 10.22 б), г) */
}