C语言编程题,求助大佬解答 100

用指针对有序数组进行插入和删除,使得它仍然有序... 用指针对有序数组进行插入和删除,使得它仍然有序 展开
 我来答
左思雁Pk
2020-09-01 · TA获得超过765个赞
知道小有建树答主
回答量:350
采纳率:75%
帮助的人:286万
展开全部
#include <iostream>
using namespace std;

struct Node
{
int elem;
Node* next;
};

struct List
{
Node* head = NULL;
};

//查找前驱节点
Node* find_pre(List list, int elem)
{
if (!list.head) return NULL;
Node* node = list.head;
while (node->next && node->next->elem < elem) node = node->next;
return node;
}

//插入节点
void ins_elem(List &list, int elem)
{
Node* pre = find_pre(list, elem);
if (!pre)
{
list.head = (Node*)malloc(sizeof(Node)); //头结点暂不存放值
list.head->next = (Node*)malloc(sizeof(Node));
list.head->next->elem = elem;
list.head->next->next = NULL;
return;
}

Node* new_node = (Node*)malloc(sizeof(Node));
new_node->elem = elem;
new_node->next = pre->next;
pre->next = new_node;
}

//删除节点
void del_elem(List &list, int elem)
{
Node* pre = find_pre(list, elem);
if (!pre) return;
while (pre->next->elem == elem)
{
Node* next = pre->next;
pre->next = next->next;
free(next);
}

}

//遍历链表
void traverse(List list)
{
if (!list.head) return;
Node* node = list.head->next;
while (node)
{
cout << node->elem << " ";
node = node->next;
}
cout << endl;
}

//销毁链表
void destory(List &list)
{
if (!list.head) return;
Node* node = list.head->next;
while (node)
{
Node* next = node->next;
free(node);
node = next;
}
}

int main()
{
int arr[5] = { 1, 2, 2, 4, 5 };
List list;//声明链表
for (int i = 0; i < 5; i++)
{
ins_elem(list, arr[i]);
}
traverse(list);
del_elem(list, 2);
traverse(list);
destory(list);
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
pardream941026
2020-09-01 · TA获得超过8216个赞
知道大有可为答主
回答量:4602
采纳率:89%
帮助的人:1282万
展开全部
题目是不是出错了,应该是使用指针对有序数组进行插入和排序吧,使用链表?这个怎么理解?
追问
不好意思,题目修改过来了,能帮忙回答了吗?
追答

不好意思,这几天没上百度。现在还需要吗?

粘贴代码超长,用图。

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式