小学期第一天学习了一点链表的知识,想通过CSDN记录一下。(有不足的地方请多多指教)
1.创建链表:
//创建链表
link* buildLink(int num)
{
link* head = (link*)malloc(sizeof(link));
link* temp = head;
for (int i = 1; i <= num; i++)
{
link* a = (link*)malloc(sizeof(link));
a->element = i;
a->next = NULL;
temp->next = a;
temp = temp->next;
}
return head;
}
2.输出链表:
//输出链表
void printLink(link* p)
{
link* temp = p;
while (temp->next != NULL)
{
temp = temp->next; //头节点没有数据域
printf("%d ", temp->element);
}
printf("\n");
}
3.查询链表中元素位置:
//查询元素在链表中的位置
int selectElem(link* p, int key)
{
link* temp = p;
int counter = 0;
while (temp->next)
{
temp = temp->next;
counter++;
if (temp->element == key)
{
return counter; //返回元素所在位置
}
}
return -1; //没有查询到key
}
4.修改num位置的元素为element:
//修改num位置的元素为element
void amendElem(link* p, int num,int element)
{
link* temp = p;
for (int i = 0; i < num; i++)
{
temp = temp->next;
}
temp->element = element;
}
5.新增节点:
//新增节点
void addElem(link* p,int num, int element)
{
link* temp = p;
//先找到新增节点位置前一个节点
for (int i = 1; i < num; i++)
{
if (!temp->next)
{
printf("error index\n");
return;
}
temp = temp->next;
}
link* new_elem = (link*)malloc(sizeof(link));
new_elem->next = temp->next;
temp->next = new_elem;
new_elem->element = element;
}
6.删除节点:
//删除节点
int delElem(link* p, int elem)
{
link* temp = p;
link* temp0 = p;
while (temp->next)
{
temp0 = temp; //temp0保存前一个节点的信息
temp = temp->next; //temp保存要删除节点的信息
if (elem == temp->element)
{
temp0->next = temp->next;
free(temp);
return 1;
}
}
return -1; //没有找到elem
}
7.测试用例:
int main()
{
link* link0 = buildLink(6);
printLink(link0);
delElem(link0, 4);
printLink(link0);
addElem(link0, 5, 100);
amendElem(link0, 1, 10);
printLink(link0);
int flag = selectElem(link0, 2);
if (flag != -1)
printf("2 is the %d number in the link0.", flag);
else
printf("failing to find 2 in the link0."); //flag == 0
return 0;
}
8.输出结果: