两种实现 无头结点单向链表 的插入、查找、删除
来源:互联网 发布:c语言continue在if中 编辑:程序博客网 时间:2024/05/17 02:53
int DmixObj;
void *pstAlgObj;
struct _struDmixAlgLink *next;
}struDmixAlgLinkObj, *pstDmixAlgLinkObj;
// test_link.cpp : 定义控制台应用程序的入口点。
//
#include <stdlib.h>
#include <string.h>
#include "TL_DmixAlgLink.h"
struDmixAlgLinkObj *g_pstruDmixAlgObj = NULL;
//单向链表的创建
struDmixAlgLinkObj *DmixAlgInitList(int DmixObj, void *pstAlgObj)
{
struDmixAlgLinkObj *pNode;
pNode = (struDmixAlgLinkObj *)malloc(sizeof(struDmixAlgLinkObj)); //éê??í·?áμ?????
if(NULL == pNode)
{
return 0;
}
pNode->next =NULL;
pNode->DmixObj = DmixObj;
pNode->pstAlgObj = pstAlgObj;
return pNode;
}
void LinkedListPopFront(struDmixAlgLinkObj **pstDmixAlgLinkHead) //í·é?
{
if (*pstDmixAlgLinkHead == NULL)//??á′±í
{
return;
}
else if ((*pstDmixAlgLinkHead)->next == NULL)//??óDò????áμ?
{
*pstDmixAlgLinkHead = NULL;
}
else
{
struDmixAlgLinkObj *tmp = (*pstDmixAlgLinkHead)->next;//tmp???ò?-?èí·?áμ????òμ???ò???????
free(*pstDmixAlgLinkHead);
*pstDmixAlgLinkHead = tmp;
}
}
int LinkedListInsert(struDmixAlgLinkObj **pstDmixAlgLinkHead,int DmixObj, void *pstAlgObj)
{
struDmixAlgLinkObj *pNode;
struDmixAlgLinkObj *p;
if(NULL == *pstDmixAlgLinkHead)
{
*pstDmixAlgLinkHead = DmixAlgInitList(DmixObj, pstAlgObj );
}
else
{
struDmixAlgLinkObj *p = *pstDmixAlgLinkHead;
while(p->next)
{
p = p->next;
}
p->next = DmixAlgInitList(DmixObj, pstAlgObj );
}
return 1;
}
//单链表的删除,在链表中删除值为x的元素
void LinkedListDelete(struDmixAlgLinkObj **pstDmixAlgLinkHead,int DmixObj)
{
struDmixAlgLinkObj *p,*pre,*pnode; //pre为前驱结点,p为查找的结点。
if(NULL == *pstDmixAlgLinkHead)
{
return;
}
else
{
p = *pstDmixAlgLinkHead;
pre = *pstDmixAlgLinkHead;
while(p!=NULL)
{
if((p->DmixObj == DmixObj))
{
break;
}
pre = p;
p = p->next;
}
pnode = p;
pre->next = pnode->next;
if (pre == p)
{
*pstDmixAlgLinkHead = p->next;
}
free(p);
}
}
//查找单向链表的内容
struDmixAlgLinkObj * LinkedListSearch(struDmixAlgLinkObj *pstDmixAlgLinkHead, int DmixObj, void **pstAlgObj)
{
struDmixAlgLinkObj *pNode;
pNode = pstDmixAlgLinkHead;
if(NULL == pstDmixAlgLinkHead)
{
return;
}
while(pNode!= NULL)
{
if((DmixObj == pNode->DmixObj))
{
*pstAlgObj = pNode->pstAlgObj;
//return pstDmixAlgLinkHead;
break;
}
pNode = pNode->next;
}
return NULL;
}
- 两种实现 无头结点单向链表 的插入、查找、删除
- C语言实现,无头结点不带环的单向链表的基本操作
- C语言实现链表之单向链表(五)头结点前插入结点
- 插入排序的链表,无头结点
- 无头结点链表的创建及删除
- 有头结点的单向链表
- 单向链表的操作:创建,删除,插入,销毁,查找
- C语言实现链表之单向链表(六)删除头结点
- 头结点链表的三种插入结点方式
- C语言实现带头结点的链表的创建、查找、插入、删除
- C语言实现带头结点的链表的创建、查找、插入、删除操作
- 两种方法实现单向链表的创建、遍历、删除、查找、逆序输出(循环法和递归法)
- C++实现无头结点的双向链表
- 删除两个双向链表中值相同的结点--无空白头结点
- 数据结构Java实现 --单向链表的插入和删除
- 单向链表指针头结点的修改
- (学习java)带有头结点的单向循环链表
- 单链表的建立(头部延长、尾部延长)、插入操作、删除操作(无头结点的删除、有头结点的删除)
- 【Cython】Cython三分钟入门教程
- 8.15 最大公共子图
- hihoCoder #1081 : 最短路径·一 (Dijkstra算法)
- 关于继承
- PHP5.6.30配置Mysql和mantis
- 两种实现 无头结点单向链表 的插入、查找、删除
- 列表生成式
- 【Python】产生随机数字09
- python win7 64位下无法安装mysql驱动问题
- 线程的实现
- 有上下界的网络流小结
- 静态链接、动态链接、静态重定位、动态重定位
- 往JScrollPane中添加组件时滚动条不出现的解决方法
- mysqld_multi配置多实例