|
|
|
| Расскажите пожалуйста подробно :) Ни в одной книге не нашел доходчивого объяснения... | |
|
|
|
|
|
|
|
для: DDK
(30.03.2007 в 23:10)
| | если не ошибаюсь то это списки констант ... и используют их если не ошибаюсь, когда нужно описать большое количество констант одна за другой ... например таблица цветов. | |
|
|
|
|
|
|
|
для: Oligarx
(31.03.2007 в 11:08)
| | Мне вот свстретился такой пример:
struct mystruct {
char field1[8];
char field2[4];
int field3;
int field4;
float field5;
float field6;
};
struct list {
mystruct m;
list* next;
};
struct list *head, *ref, *last;
int Add() {
ref=last;
if((last=(list*) calloc(1,sizeof(list)))!=NULL) {
last->next=NULL;
if(head!=NULL)
{
ref->next=last;
ref=last;
} else {
head=ref=last;
return 1;
}
} else {
cerr<< "No more memory avaliable";
return 0;
}
};
void Del() {
if(head!=NULL) {
while(head->next!=NULL) {
ref = head->next;
free((list*) head);
head = ref;
}
}
return;
};
... и т.д. в том же духе
|
Как оно работает ?
ЗЫ: Мда... что-то с табуляцией на этом форуме плоховато, в php-шном нормально вроде было же... | |
|
|
|
|
|
|
|
для: DDK
(31.03.2007 в 11:53)
| | Списки основаны на укзателях... если массив - это набор блоков, расположенных последовательно рядом друг с другом, то список - это набор блоков, разбросанных по всей памяти и связанных друг с другом указателями. Исчезает возноможность пользоваться индексом, однако появляется гибкость - не нужнен неразрывный кусок памяти для его хранения и очень легко вставить новый элемент в середину. Элемент списка как правило состоит из структуры или объекта, в котором имеется два указателя - на предыдущий и последующий элемент, ну и полезная нагрузка: то это элемент хранит. Например
typedef struct element
{
int number;
// Ссылка на следующий элемент списка
struct element *next;
// Ссылка на предыдущий элемент списка
struct element *prev;
} element;
|
PS Подробно создание списка разбирается в нашей книге "C++ мастер-класс в задачах и примерах".
PPS Существуют готовые списки, например, контейнер list в библиотеке STL. | |
|
|
|
|
|
|
|
для: DDK
(31.03.2007 в 11:53)
| | Табуляция ещё зависит от программы, откуда копируете - в буфер обмена редактор может помещать минимальное количество символов. | |
|
|
|
|
|
|
|
для: DDK
(30.03.2007 в 23:10)
| | Блин, не понимаю я всё-таки этот указательный механизм :( Объясните пожалуйста "для идиотов", если можно с примерами :) | |
|
|
|
|
|
|
|
для: DDK
(02.04.2007 в 13:49)
| | Короче указатель, это переменная, которая может куда-нить "смотреть".
каждый элемент списка имеет 2 таких указателя - на следующий эл-т и на предыдущий. При добавлении первого элемента в список, ты все указатели направляешь в ноль (НУЛЛ). при добавлении второго, тебе надо сделать так, чтобы соответствующий указатель второго смотрел на первый эл-т, а указатель первого - на второй. примерно таким же образом делается удаление, добавление в центр эл-тов, и т.п. 2 эл-та должны каждый указывать друг на друга, т.к. если первый указывает на второй, то имея второй эл-т мы не сможем взять информацию с первого. Чтобы пробежать весь список циклом, надо иметь 2 отдельных указателя - на первый и последний эл-ты, а также "бегунок" - чтоб пробежать список.
Сначала ты ставишьбегунок на первый эл-т и делаешь че-нить с ним. Потом переходишь по указателю на след. эл-т, и так далее.
Указатель хранит адрес ячейки памяти, поэтому перейти по указателю можно простым присваиванием:
begunok=begunok->next; | |
|
|
|
|
|
|
|
для: DDK
(02.04.2007 в 13:49)
| | Указатель - это переменная в качестве значения которой используется адрес другой переменной. Используя оператор разыменовки * можно получить значение переменной на которую указывает оператор, а при помощи & наоборот адрес переменной. Я обычно, когда указатели объясняю, рисую следующую схему
| Указатель | Переменная |
---------|------------|-------------|
значение | *point | variable |
адрес | point | &variable |
---------|------------|-------------| |
| |
|
|
|