#include <stdlib.h>
typedef struct link
{
int elem;
struct link* next;
}Link;
Link* initLink()
{
int i;
Link* p = NULL;
Link* temp = (Link*)malloc(sizeof(Link));
temp->elem = 0;
temp->next = NULL;
p = temp;
for (i = 1; i < 9; i++)
{
Link* a = (Link*)malloc(sizeof(Link));
a->elem = i;
a->next = NULL;
temp->next = a;
temp = temp->next;
}
return p;
}
void insertElem(Link* p, int elem, int add)
{
int i;
Link* c = NULL;
Link* temp = p;
for (i = 1; i < add; i++)
{
temp = temp->next;
if (temp == NULL)
{
printf("插入位置无效\n");
return;
}
}
c = (Link*)malloc(sizeof(Link));
c->elem = elem;
c->next = temp->next;
temp->next = c;
}
int delElem(Link* p, int elem)
{
Link* del = NULL, *temp = p;
int find = 0;
while (temp->next)
{
if (temp->next->elem == elem)
{
find = 1;
break;
}
temp = temp->next;
}
if (find == 0)
{
return -1;
}
else
{
del = temp->next;
temp->next = temp->next->next;
free(del);
return 1;
}
}
int selectElem(Link* p, int elem)
{
int i = 1;
p = p->next;
while (p)
{
if (p->elem == elem)
return i;
p = p->next;
i++;
}
return -1;
}
int amendElem(Link* p, int oldElem, int newElem)
{
p = p->next;
while (p)
{
if (p->elem == oldElem)
{
p->elem = newElem;
return 1;
}
p = p->next;
}
return -1;
}
void display(Link* p)
{
p = p->next;
while (p)
{
printf("%d ", p->elem);
p = p->next;
}
printf("\n");
}
void Link_free(Link* p)
{
Link* fr = NULL;
while (p->next)
{
fr = p->next;
p->next = p->next->next;
free(fr);
}
free(p);
}
int main()
{
Link* p = initLink();
printf("初始化链表为:\n");
display(p);
printf("在第 3 的位置上添加元素 6:\n");
insertElem(p, 6, 3);
display(p);
printf("删除元素4:\n");
delElem(p, 4);
display(p);
printf("查找元素 2:\n");
printf("元素 2 的位置为:%d\n", selectElem(p, 2));
printf("更改元素 1 的值为 6:\n");
amendElem(p, 1, 6);
display(p);
Link_free(p);
system("pause");
return 0;
}