c语言怎样删除程序,c语言中怎样编写一个删除程序?

链表保存到文件,删除节点,添加节点。

#include "stdio.h"

#include "malloc.h"

#include /*

*

* 用户数据结构

*/

typedef struct struData

{

char usertext[100];

int userdata1;

int userdata2;

}ST_DATA,*PST_DATA;

/*

*

* 链表结构

*/

typedef struct struLink

{

ST_DATA userdata;

struct struLink* pnext;

}ST_LINK,*PST_LINK;

/*

*

* 链表操作 之 申请节点

*/

PST_LINK MallocLinkNode()

{

PST_LINK pLink = NULL;

pLink =(PST_LINK) malloc(sizeof(ST_LINK));

if (pLink)

{

memset(pLink,0,sizeof(ST_LINK));

}

return pLink;

}

/*

*

* 链表操作 之 添加节点(末尾)

*/

void AddNodeToLinTail(PST_LINK pNodeHead,PST_LINK pNodeAdd)

{

while(pNodeHead->pnext != 0)

{

pNodeHead = pNodeHead->pnext;

}

pNodeHead->pnext = pNodeAdd;

pNodeAdd->pnext = 0;

}

/*

*

* 链表操作 之 添加节点(头部)

*/

PST_LINK AddNodeToLinHead(PST_LINK pNodeHead,PST_LINK pNodeAdd)

{

pNodeAdd->pnext = pNodeHead;

return pNodeAdd;

}

/*

*

* 链表操作之 删除节点(假设 member == nCondition 为删除条件);

* 返回值为新的头部,因为有可能头部被删除。

*/

PST_LINK DelLinkNode(PST_LINK pNodeHead,int nCondition)

{

PST_LINK pTemp = pNodeHead;

PST_LINK pTemp2;

/*在头部满足条件*/

if ( pNodeHead->userdata.userdata1 == nCondition)

{

pTemp = pNodeHead->pnext;

free(pNodeHead);

/*头部被删除,返回下个节点当头部*/

return pTemp;

}

else

{

/*中间节点寻找满足的条件*/

while(pNodeHead->pnext != 0)

{

/*如果下一个节点满足条件*/

if (pNodeHead->pnext->userdata.userdata1 == nCondition) /*这里是需要修改的地方*/

{

/*下一个满足了,我们删除下个节点,先保存它,以便释放内存*/

pTemp2 = pNodeHead->pnext;

/*把它后面的节点连上来,覆盖要删除的节点*/

pNodeHead->pnext = pNodeHead->pnext->pnext;

/*释放删除节点内存*/

free(pTemp2);

/*这里可以返回了,要返回原先的链表头*/

return pTemp;

}

/*测试下一个*/

pNodeHead = pNodeHead->pnext;

}

}

/*到这里,说明找不到,把原先的头部返回*/

return pTemp;

}

int GetNodeCount(PST_LINK pLinkHead)

{

int nCount = 0;

while(pLinkHead)

{

nCount++;

pLinkHead = pLinkHead->pnext;

}

return nCount;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值