c语言单链表超市出库,c语言-单链表(二)

继续复习链表知识点,本章包含单链表的增加,删除,判断是否为空,和链表长度,以及链表的排序 几个知识点

1.链表的判断是否为空

//1.判断链表是否为空

bool isempty_list(PNODE pHead) {

return pHead->pNext == NULL;

}

2. 计算链表的长度

//2.链表长度

int length_list(PNODE pHead) {

PNODE pFirst = pHead->pNext;//获取头结点

int num = 0;

while (pFirst != NULL)

{

num++;

pFirst = pFirst->pNext;

}

return num;

}

3. 在制定位置增加节点

//指索引位置插入节点

bool insert_list(PNODE pHead, int pos, int data) {

PNODE p = pHead;//头结点

int i = 0;

while (p != NULL&&i <= pos)

{

p = p->pNext;

i++;

}

//pos 是索引位置,循环i不能>pos+1

if (p == NULL || i > (pos + 1))

{

return false;

}

PNODE pNew = (PNODE)malloc(sizeof(PNODE));

if (NULL == pNew)

{

printf("内存分配失败");

exit(-1);

}

pNew->data = data;

pNew->pNext = p->pNext;

int pVal = p->data;

p->pNext = pNew;

return true;

}

4. 在指定位置删除节点

bool delete_list(PNODE pHead, int pos) {

PNODE p = pHead->pNext;

int i = 0;

//这样循环为了获取pos 前面一个节点

while (NULL != p&&i < pos - 1)

{

p = p->pNext;

i++;

}

if (NULL == p || i > pos - 1)

{

return false;

}

PNODE q = p->pNext;

p->pNext = p->pNext->pNext;

free(q);

q = NULL;

return true;

}

5.节点的排序

//排序算法

void sort_list(PNODE pHead) {

int len = length_list(pHead);

PNODE p, q;

int i, j, temp;

for (i = 0, p = pHead->pNext; i < len - 1; i++, p = p->pNext)

{

for (j = i + 1, q = p->pNext; j < len; j++, q = q->pNext)

{

if (p->data > q->data)

{

temp = p->data;

p->data = q->data;

q->data = temp;

}

}

}

return;

}

6. 测试代码

void main(void) {

PNODE pHead = create_list();

if (isempty_list(pHead)) {

printf("链表为空\n");

}

else {

printf("链表不为空\n");

}

bool is_insert=insert_list(pHead, 2, 100);

if (is_insert)

{

printf("链表在索引2出插入100 成功\n");

show_list(pHead);

}

else {

printf("链表在索引2出插入100 失败\n");

}

printf("删除节点索引:1\n");

bool is_del=delete_list(pHead, 1);

if (is_del)

{

printf("删除节点索引:1 成功\n");

show_list(pHead);

}

else {

printf("删除节点索引:1 失败\n");

}

}

4cb1d2db1ea111151a2fdd7e620da65d.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值