include stdio include stdlib include string include conio typedef stru

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
typedef struct node
{
int id;//номер элемента
char *string;// строка
struct node *next;// ссылка на следующий элемент
}ITEM;
typedef struct hnode
{
int number;//количество элементов в списке
ITEM *first;//ссылка на первый
}HITEM;
HITEM *head=NULL;
int LastID=0;
void EmptyList();
void ViewList();
void AddList();
void main(void)
{
int key;
EmptyList();
for(;;)
{
puts("ENTER - добавление");
puts("V - просмотр");
puts("ESC - выход");
key=getch();
if(key==27) //ESC
{
break;
}
else
{
switch(key)
{
case 13: //ENTER
AddList();
break;
case 118: //V
ViewList();
break;
default:
break;
}
}
}
}
void EmptyList()//создание головы. можно не заморачиваться и просто скопировать
{
if((head=(HITEM *)malloc(sizeof(HITEM)))!=NULL)
{
head->number=0;
head->first=NULL;
}
else
{
puts("Memory error");
}
}
void ViewList()
{
ITEM *current=head->first;
if(head->number==0)//проверяем пуст ли список
{
puts("List is empty");
}
else//если в списке есть элементы
{
while(current!=NULL)
{
printf("%d. ", current->id);//вывод элемента
puts(current->string);//вывод элемента
current=current->next;// (текущий элемент)=(следующему элементу)
}
}
}
void AddList()
{
ITEM *current=head->first, *new_node;
char *str;
puts("Введите строку: ");
gets(str);
if((new_node=(ITEM *)malloc(sizeof(ITEM)))==NULL)//выделение памяти под новый элемент списка
{
puts("Memory error");
}
else
{
strcpy(new_node->string, str);// копипирование информационной части в список
new_node->id=++LastID;//номер информационной части
new_node->next=NULL;//ссылка на следующий элемент
if(head->number==0)//проверяем пуст ли список
{//если пуст
head->first=new_node;// ссылка на первый элемент списка = новому элементу
head->number=1;// количество элементов
}
else
{//если есть элементы
while(current->next!=NULL)//пока ссылка на следующий не пуста
{
current=current->next;// (текущий элемент)=(следующему элементу)
}
current->next=new_node;//(ссылка на следующий)=(новому элементу элементу)
}
}
}