C语言实现简单的单向链表(创建、插入、删除)及等效STL实现代码

此页面是否是列表页或首页?未找到合适正文内容。

C语言实现简单的单向链表(创建、插入、删除)及等效STL实现代码

标签:clu版本oid没有方法const声明str存在

实现个算法,懒得手写链表,于是用C++的forward_list,没有next()方法感觉很不好使,比如一个对单向链表的最简单功能要求:

input:

1 2 5 3 4

output:

1->2->5->3->4

相当于仅仅实现了插入、遍历2个功能(当然遍历功能稍微修改就是销毁链表了)

用纯C写了份测试代码

/* 基本数据结构的定义以及函数的声明 */
typedef int ElemType;

typedef struct Node
{
ElemType elem;
struct Node* next;
} Node, * NodePtr, **ForwardList;

NodePtr createNode(ElemType x);

void showList(ForwardList lst);

void destroyList(ForwardList lst);

// 创建元素为x的节点并插入到节点where后面
// 若where为NULL, 则插入到链表lst的首部作为首节点
// 返回新节点的指针
NodePtr insertAfterNode(NodePtr where, ElemType x,
ForwardList lst);

/* 链表相关函数的具体实现 */
NodePtr createNode(ElemType x)
{
NodePtr pNode = (NodePtr) malloc(sizeof(Node));
if (pNode == NULL) {
perror(\”malloc\”);
exit(1);
}

pNode->elem = x;
pNode->next = NULL;
return pNode;
}

NodePtr insertAfterNode(const NodePtr where,
ElemType x, ForwardList lst)
{
NodePtr pNode = createNode(x);

if (where == NULL) {
*lst = pNode;
} else {
pNode->next = where->next;
where->next = pNode;
}

return pNode;
}

void showList(ForwardList lst)
{
printf(\”显示链表: \”);
NodePtr curr = *lst;
while (curr->next != NULL) {
printf(\”%d->\”, curr->elem);
curr = curr->next;
}
printf(\”%d\\n\”, curr->elem);
}

void destroyList(ForwardList lst)
{
printf(\”销毁链表: \”

作者: 安兔兔

为您推荐

返回顶部