数据结构——链表实现(c语言)
代码:
typedef char ElemType;
typedef struct Node
{
ElemType data;
struct Node *next;
} Node;
typedef struct LinkList
{
int length;
struct Node *list;
} LinkList;
int InitList(LinkList *L)
{
L->length = 0;
L->list = NULL;
return 1;
}
int InsertElem(LinkList *L, int i, ElemType e)
{
if (i > L->length)
{
return 0;
}
int j = 0;
Node *p = L->list, *s = (Node*)malloc(sizeof(Node));
if (!s)
{
return 0;
}
s->data = e;
L->length++;
if (!p)
{
s->next = L->list;
L->list = s;
return 1;
}
while (p->next && j < i - 1)
{
p = p->next;
++j;
}
s->next = p->next;
p->next = s;
return 1;
}
int GetElem(LinkList L, int i, ElemType *e)
{
if (L.length == 0)
{
return 0;
}
Node *p = L.list;
int j = 0;
while (p && j < i)
{
p = p->next;
++j;
}
if (!p)
{
return 0;
}
*e = p->data;
return 1;
}
int PrintList(LinkList L)
{
if (L.length == 0)
{
return 0;
}
Node *p = L.list;
while(p)
{
printf("%c ",p->data);
p = p->next;
}
printf("\n");
return 1;
}
int DestoryList(LinkList *L)
{
if (L->length == 0)
{
return 0;
}
Node *p;
while(L->list)
{
p = L->list->next;
free(L->list);
L->list = p;
}
L->length = 0;
return 1;
}
int main(int argc, char *argv[])
{
ElemType e;
List L;
InitList(&L);
InsertElem(&L, 0, 'a');
InsertElem(&L, 1, 'c');
InsertElem(&L, 2, 'd');
InsertElem(&L, 1, 'b');
PrintList(L);
GetElem(L, 1, &e);
printf("%c\n", e);
DestoryList(&L);
return 1;
}