#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
#define MAXSIZE 10
#define ALPHA 20
typedef struct{
char name[ALPHA];
int n;
}Item;
typedef struct{
Item *item;
int len;
}List;
void InitList(List *l);
void DestroyList(List *l);
void ClearList(List *l);
bool IsEmpty(List *l);
int ListLength(List *l);
bool ListInsert(List *l, int i, Item e);
bool ListDelete(List *l, int i, Item * e);
int LocateElem(List *l, Item e);
bool GetElem(List *l, int i, Item *e);
void Traverse(List *l);
int main(void)
{
List list = {.item = NULL};
Item temp;
int i = 0, n = 0;
temp.n = 100;
strcpy(temp.name,"AAA");
InitList(&list);
while(i<MAXSIZE && scanf("%s",list.item[i].name) != EOF)
{
scanf("%d", &list.item[i++].n);
list.len++;
}
printf("****************\n");
if(i != 0)
Traverse(&list);
printf("****************\n");
if(ListInsert(&list , 1, temp))
Traverse(&list);
printf("****************\n");
if(ListDelete(&list, 1, &temp))
printf(" %d %s \n",temp.n, temp.name);
DestroyList(&list);
return 0;
}
bool GetElem(List *l, int i, Item *e)
{
if(IsEmpty(l) || (i < 1 || i >l->len) )
return false;
*e = l->item[i-1];
return true;
}
int LocateElem(List *l, Item e)
{
int i;
for(i=0;i<l->len;++i)
if(strcmp(l->item[i].name, e.name) ==0 && l->item[i].n == e.n)
return i+1;
return 0;
}
bool ListDelete(List *l, int i, Item * e)
{
int n;
if(IsEmpty(l) || (i < 1 || i >l->len) )
return false;
*e = l->item[i-1];
for(n = i;n < l->len; ++n)
l->item[n-1] = l->item[n];
l->len--;
return true;
}
bool ListInsert(List *l, int i, Item e)
{
int n;
if(i < 1 || i > l->len +1 )
return false;
if(l->len == MAXSIZE)
return false;
for(n = l->len; n > i-1; n--)
l->item[n] = l->item[n-1];
l->item[n] = e;
l->len++;
return true;
}
int ListLength(List *l)
{
return l->len;
}
bool IsEmpty(List *l)
{
if(l->len == 0)
return true;
else
return false;
}
void ClearList(List *l)
{
l->len = 0;
}
void DestroyList(List *l)
{
if(l->item)
free(l->item);
}
void InitList(List *l)
{
l->item = (Item *) malloc(sizeof(Item) * MAXSIZE);
l->len = 0;
}
void Traverse(List *l)
{
int i;
for(i = 0;i < l->len; ++i)
printf(" %d %s \n", l->item[i].n, l->item[i].name);
}