文章目录
1. 思路
1.1 按值插入
1.2 查找
1.3 长度
返回size
1.4 按值删除
2. 代码
2.1 SCList.h
加入
//按值插入
void insert_val(List *list, ElemType x);
//查找
Node* find(List *list, ElemType key);
//求长度
int length(List *list);
//按值删除
void delete_val(List *list, ElemType x);
2.2 SCList.cpp
加入
void insert_val(List *list, ElemType x)
{
Node *p = list->first;
while(p->next != list->first && p->next->data < x)
{
p = p->next;
}
if(p->next == list->first && p->data < x)
{
push_back(list, x);
}
else
{
Node *s = buy_node(x);
s->next = p->next;
p->next = s;
list->size++;
}
}
Node* find(List *list, ElemType key)
{
Node *s = list->first;
while(s != list->last)
{
s = s->next;
if(s->data == key)
{
return s;
}
}
printf("该链表没有要查找的值\n");
return NULL;
}
int length(List *list)
{
return list->size;
}
void delete_val(List *list, ElemType x)
{
Node *s = find(list, x);
if(s == NULL)
{
printf("该链表没有需要删除的值。\n");
return;
}
Node *p = list->first;
while(p->next != s)
{
p = p->next;
}
free(p->next);
p->next = s->next;
if(s == list->last)
{
list->last = p;
list->last->next = list->first;
}
list->size--;
}
2.3 main
加入
case 6:
printf("请输入要插入的值:");
scanf("%d", &Item);
insert_val(&mylist,Item);
break;
case 7:
printf("请输入要查找的值:");
scanf("%d", &Item);
s = find(&mylist, Item);
printf("查找的值地址为: %p\n", s);
break;
case 8:
printf("该链表的长度为: %d\n", length(&mylist));
break;
case 9:
printf("请输入要删除的值。\n");
scanf("%d", &Item);
delete_val(&mylist, Item);
break;
3. 结果
3.1 按值插入
3.2 查找
3.3 长度
3.4 按值删除
总结
接下来做排序&&反转&&清除&&摧毁。