Нужно: Создать связный список, вывести его на экран. Вставить элемент с заданным словом между элементами с указанными номерами. Вывести полученный список на экран.
Я написал прогу, кроме функции вставки, чет не получается, может у кого она есть?
Нужно: Создать связный список, вывести его на экран. Вставить элемент с заданным словом между элементами с указанными номерами. Вывести полученный список на экран.
Я написал прогу, кроме функции вставки, чет не получается, может у кого она есть?
Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.
29 апреля 2008 в 8:03
Что значит "link" и "head"?
25 апреля 2008 в 8:00
// Вот небольшой пример
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define STRING_SIZE 16
typedef struct list{
char data[STRING_SIZE];
struct list* next;
} node,*link;
link l_append(link head, const char* data) // Добавление элемента в конец списка
{
link newElement = (link)(malloc(sizeof(node)));
newElement->next = NULL;
strcpy(newElement->data, data);
if (head == NULL) head = newElement;
else
{
link currentElement = head;
for(;currentElement->next != NULL; currentElement = currentElement->next);
currentElement->next = newElement;
}
return head;
}
void l_print(link head) // Вывод элементов списка
{
if (head == NULL) return;
link currentEl = head;
int currentNum = 0;
for(;currentEl != NULL; currentEl = currentEl->next,currentNum++)
printf("Элемент #%i : %s\n", currentNum, currentEl->data);
}
link l_insert(link head, int index, char data[STRING_SIZE]) // Вставка после указанного индекса
{
if (head == NULL) return NULL;
link newElement = (link)(malloc(sizeof(node)));
newElement->next = NULL;
strcpy(newElement->data, data);
int currentIndex = 0;
link currentElement = head;
for(;currentIndex < index ; currentElement = currentElement->next,currentIndex++);
newElement->next = currentElement->next;
currentElement->next = newElement;
return head;
}
int main()
{
link head = NULL;
int nWords = 0;
printf("Введите количество слов \n");
scanf("%i", &nWords);
char tmpStr[STRING_SIZE];
for (;nWords != 0; nWords–)
{
scanf("%s",&tmpStr);
head = l_append(head,tmpStr);
}
printf("До вставки: ");
l_print(head);
char newWord[STRING_SIZE];
int index;
printf("Введите индекс и слово для вставки:\n");
scanf("%i %s",&index, newWord);
head = l_insert(head, index, newWord);
printf("После вставки: \n");
l_print(head);
return 0;
}
25 апреля 2008 в 7:03
связанный список(однонаправленный) это структура состоящая из двух элементов. Один содержит данные, а другой ссылку(указатель) на следующий элемент.
То есть для того что бы вставить элемент нужно у предыдущей структуры в указатель записать адрес новой структуры, а в новой структуре в указатель записать адрес следующей структуры.
Было: A -> B
Стало: A -> C -> B
24 апреля 2008 в 21:01
//algolist.manual.ru/ds/basic/simple_list.php Здесь есть статья про алгоритмы работы со списками.
24 апреля 2008 в 20:03
Помогите, пожалуйста…..
У меня Виста…. Поставила пароль и забыла…
Как его взломать и не потерять данные?
24 апреля 2008 в 20:01
язык С
24 апреля 2008 в 20:01
элементы в список вводятся с клавы
24 апреля 2008 в 20:01
/*Создать связный список, вывести его на экран.
Вставить элемент с заданным словом между элементами с указанными номерами.
Вывести полученный список на экран.*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 3
#define MAXL 10
typedef struct node
{
char data[MAXL];
struct node *next;
}NODE, *PNODE;
void createlist(PNODE *top);
void printlist(PNODE top);
void insertnode(PNODE *top);
void main (void)
{
char item[MAXL];
PNODE top=NULL;
createlist(&top);
printf("List:\n");
printlist(top);
}
void createlist(PNODE *curr)
{
char item[MAXL];
int i;
PNODE ptr;
for (i=0;i<MAX; i++)
{
printf("Word->");
gets(item);
ptr=PNODE(malloc(sizeof(NODE)));
ptr->next=*curr;
strcpy(ptr->data, item);
*curr=ptr;
}
}
void printlist(PNODE top)
{
if(top==NULL)
printf("List is empty!\n");
else
{
while (top)
{
puts(top->data);
top=top->next;
}
}
}
24 апреля 2008 в 19:05
А какой язык хоть?