Someone Гость
|
Добавлено: Чт Фев 27 2003 16:28 Заголовок сообщения: Односвязный линейный список - пример |
|
|
Вот тебе на Си под дос: #include #include #include #include
struct element //Описание типа { char str[10]; //Полезная информация int key; //Ключ element* next; //Указатель на следующий } *list=NULL; //Описание списка, list-указатель на первый элемент
element* find(element* list, int key) //Функция поиска { element* current=list; //Указатель на текущий элемент
while (current!=0 & current->key!=key) { current=current->next; }
return current; //Возвращает указатель на элемент с ключем, равным 'key'
}
element* find_place(element* list, int key) //Функция поиска места всавки { element* current=list; //Указатель на текущий элемент element* previous=NULL; //Указатель на предыдущий элемент
while (current!=NULL & current->key next; }
return previous; //Возвращает указатель на элемент с ключем, меньшим 'key'
}
void add(element* &place, element* x) //Функция всавки элемента { x->next = place; place = x; }
void del(element* &x) //Функция удаления элемента из списка { element* e=x; //Запоминаем указатель на удаляемый элемент x = x->next; //Перекидываем указатель на следующий delete e; //Освобождение памяти }
element* create(char str[10], int key) //Функция создания элемента { element* x = new element; //Выделение памяти
for (int i=0; istr[i] = str[i]; // Заполнение x->key = key; // полей x->next= NULL; return x; }
void output(element* list) { element* current=list; int i=1;
printf("Содержимое списка\n"); printf("Номер Текст Ключ \n"); while(current!=NULL) { printf("%-10d%-20s%-10d\n",i++,current->str,current->key); current = current->next; } }
void main() { clrscr(); int n=0; //Кол-во элементов char str[10]; //Строка int key; element *place,*x;
printf("Введите количество элементов:"); scanf("%d",&n);
// printf("Текст Ключ \n"); for (int i=0; inext,x); //Вставка в промежуток else add(list,x); //Первый элемент }
clrscr(); output(list); getch();
printf("Введите ключ удаляемого элемента: "); scanf("%d",&key); if(find(list,key)) //Поиск элемента { place = find_place(list,key); //Поиск для удаления if(place) del(place->next); //Удаление промежуточного else del(list); //Удаление первого элемента output(list); } else printf("Элемент с таким ключом не найден!");
getch();
}
Вроде работает..... Если нет, могу другой бросить.......... |
|