链式数据结构 单链表

typedef struct LNode
{
    
int nData;
    
struct LNode* pNext;
}LNode, 
*LinkList;

// output error
void MyError(void)
{
    std::cout 
<< "error" << std::endl;
}
// create List
bool CreateList(LinkList& pList)
{
    pList 
= (LinkList)malloc(sizeof(LNode));
    
if (NULL == pList)
    {
        
return false;
    }

    pList
->nData = 0;
    pList
->pNext = NULL;

    
return true;
}

// insert element
bool InsertElement(LinkList& pList, int nPos, int nElement)
{
    LinkList pListTemp 
= pList; 
    
int nIndex = 0;

    
while (NULL != pListTemp && nIndex < nPos)
    {
        
++nIndex;
        pListTemp 
= pListTemp->pNext;
    }

    LinkList pNode 
= (LinkList)malloc(sizeof(LNode));
    
if (NULL == pNode)
    {
        
return false;
    }

    pNode
->nData = nElement;
    pNode
->pNext = pListTemp->pNext;
    pListTemp
->pNext = pNode;

    
++pList->nData;

    
return true;
}

// delete element
bool DeleteElement(LinkList& pList, int nPos)
{
    LinkList pListTemp 
= pList;
    
int nIndex = 0;

    
while (NULL != pListTemp->pNext && nIndex < nPos - 1)
    {
        pListTemp 
= pListTemp->pNext;
        
++nIndex;
    }

    
if (NULL == pListTemp->pNext || nIndex > nPos - 1)
    {
        
return false;
    }

    LinkList pNode 
= pListTemp->pNext;
    pListTemp
->pNext = pListTemp->pNext->pNext;
    
--pList->nData;
    free(pNode);

    
return true;
}

// Edit element
void EditElement(LinkList& pList, int nPos, int nElement)
{
    LinkList pListTemp 
= pList;
    
int nIndex = 0;
    
while (NULL != pListTemp->pNext && nIndex < nPos)
    {
        pListTemp 
= pListTemp->pNext;
        
++nIndex;
    }

    pListTemp
->nData = nElement;
}

// Output list
void OutPutElements(const LinkList& pList)
{
    LinkList pListTemp 
= pList->pNext;
    
while (NULL != pListTemp)
    {
        std::cout 
<< pListTemp->nData << std::endl;
        pListTemp 
= pListTemp->pNext;
    }
}

int _tmain(int argc, _TCHAR* argv[])
{
    LinkList pList;

    
if (!CreateList(pList))
    {
        MyError();
    }

    
for (int i = 0; i < 10++i)
    {
        
if (!InsertElement(pList, pList->nData, i))
        {
            MyError();
        }
    }

    
if (!DeleteElement(pList, 2))
    {
        MyError();
    }

    
if (!DeleteElement(pList, 1))
    {
        MyError();
    }

    EditElement(pList, 
50);
    OutPutElements(pList);

    
return 0;
}
 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值