zoukankan      html  css  js  c++  java
  • linux下c语言 双向链表

    C/C++ code

    /*
    sgx 2008-10-30 c语言 双向链表
    */
    #include
    <stdio.h>
    #include
    <assert.h>
    #include
    <malloc.h>
    #define TRUE 1;
    #define FALSE 0;

    typedef
    int ELEMTYPE;

    typedef
    struct DoubleLinkNode
    {
    ELEMTYPE data;
    struct DoubleLinkNode *last;
    struct DoubleLinkNode *next;
    }dLinkNode,
    *dLinkList;

    dLinkList CreateDLlist(
    void);/*创建空链*/
    int InitDLlist(dLinkList * dl);/*初始化链*/
    int InsertLNode(dLinkNode *pNode,ELEMTYPE e);/*节点前插入节点,返回TRUE,FALSE*/
    int InsertNNode(dLinkNode *pNode,ELEMTYPE e);/*在某节点后面插入节点,*/
    int DeleteNode(dLinkNode *pNode);/*删除节点,返回TRUE换或FALSE*/
    void DestroyDLlist(dLinkList dl);/*销毁链*/
    void LNTravel(dLinkList dl);/*从前向后遍历*/
    void NLTravel(dLinkList dl);/*从后向前遍历*/
    int main()
    {
    dLinkList dl
    =CreateDLlist();
    if(InitDLlist(&dl))printf("Initial sucess!\n");
    LNTravel(dl);
    NLTravel(dl);
    DestroyDLlist(dl);
    return 0;
    }
    dLinkList CreateDLlist(
    void)/*创建空链*/
    {
    dLinkList dl
    =NULL;
    return dl;
    }
    int InitDLlist(dLinkList *dl)/*初始化链*/
    {
    ELEMTYPE e;
    char symbol;
    dLinkNode
    *pNode;
    if(*dl!=NULL)
    {printf(
    "this LinkList has been Initialed.\n");return FALSE;}
    printf(
    "input data:");
    scanf(
    "%d",&e);
    getchar();
    /*获取空格*/
    *dl=(dLinkNode*)malloc(sizeof(dLinkNode));
    if(dl==NULL){printf("assigned memory failed,end Initailization!\n");
    return FALSE;}
    (
    *dl)->data=e;
    (
    *dl)->next=NULL;
    (
    *dl)->last=NULL;
    pNode
    =*dl;
    printf(
    "continue?y/n ");
    scanf(
    "%c",&symbol);
    getchar();
    while(symbol=='y' || symbol=='Y')
    {
    printf(
    "input data:");
    scanf(
    "%d",&e);
    getchar();
    InsertNNode(pNode,e);
    pNode
    =pNode->next;
    printf(
    "continue?y/n ");
    scanf(
    "%c",&symbol);
    getchar();
    }
    return TRUE;

    }
    int InsertLNode(dLinkNode *pNode,ELEMTYPE e)/*节点前面插入节点,返回TRUE,FALSE*/
    {
    dLinkNode
    *newNode,*lastNode;
    if(pNode==NULL)
    {
    printf(
    "Node is NULL,canot operate!\n");
    return FALSE;
    }
    newNode
    = (dLinkNode*)malloc(sizeof(dLinkNode));
    if(!newNode){printf("assigned memory failed!\n");return FALSE;}/*分配失败*/
    newNode
    ->data=e;/*插入数据*/
    if(pNode->last==NULL)
    {
    newNode
    ->last=NULL;
    }
    else
    {
    lastNode
    = pNode->last;
    lastNode
    ->next = newNode;
    newNode
    ->last = lastNode;

    }
    newNode
    ->next=pNode;
    pNode
    ->last=newNode;
    return TRUE;
    }
    int InsertNNode(dLinkNode *pNode,ELEMTYPE e)/*在某节点后面插入节点,*/
    {
    dLinkNode
    *newNode,*nextNode;
    if(pNode==NULL)
    {
    printf(
    "Node is NULL,canot operate!\n");
    return FALSE;
    }
    newNode
    = (dLinkNode*)malloc(sizeof(dLinkNode));
    if(!newNode){printf("assigned memory failed!\n");return FALSE;}/*分配失败*/
    newNode
    ->data = e;/*插入数据*/

    if(pNode->next==NULL)
    {
    newNode
    ->next=NULL;
    }
    else
    {
    nextNode
    =pNode->next;
    newNode
    ->next = nextNode;
    nextNode
    ->last=newNode;
    }
    pNode
    ->next=newNode;
    newNode
    ->last=pNode;

    return TRUE;
    }
    int DeleteNode(dLinkNode *pNode)/*删除节点,返回FALSE或TRUE*/
    {
    ELEMTYPE e;
    dLinkNode
    *LastNode,*NextNode;
    if(pNode==NULL){printf("Node is NULL,cannot operate it!\n");return FALSE;}
    LastNode
    =pNode->last;
    NextNode
    = pNode->next;
    e
    =pNode->data;
    if(pNode->next ==NULL && NULL == pNode->last)
    {
    free(pNode);
    printf(
    "%d is deleted,this LinkList now is NULL!\n",e);
    return TRUE;
    }
    else if(pNode->next == NULL)
    {
    LastNode
    ->next = NULL;
    }
    else if(pNode->last == NULL)
    {
    NextNode
    ->last=NULL;
    }
    else
    {
    LastNode
    ->next=NextNode;
    NextNode
    ->last=LastNode;
    }
    free(pNode);
    printf(
    "%d is deleted.\n",e);
    return TRUE;
    }
    void DestroyDLlist(dLinkList dl)/*销毁链*/
    {
    dLinkNode
    *pNode=dl;
    dLinkNode
    *temp;
    if(pNode==NULL)
    {printf(
    "the LinkList has been already destroyed!\n");return;}
    while(pNode->next != NULL)
    {
    temp
    =pNode;
    pNode
    =temp->next;
    DeleteNode(temp);
    }
    DeleteNode(pNode);
    }
    void LNTravel(dLinkList dl)/*从前向后遍历*/
    {
    dLinkList pNode;
    if(dl==NULL){printf("LinkList is NULL!\n");return;}
    pNode
    =dl;
    printf(
    "Travel this LinkList InOrder: ");
    do
    {
    printf(
    "%d\t",pNode->data);
    pNode
    =pNode->next;
    }
    while(pNode!=NULL);
    printf(
    "\n");
    }
    void NLTravel(dLinkList dl)/*从后向前遍历*/
    { dLinkList pNode;
    if(dl==NULL){printf("LinkList is NULL!\n");return;}
    pNode
    =dl;
    printf(
    "Travel this LinkList PostOrder: ");
    while(pNode->next!=NULL)pNode=pNode->next;
    do
    {
    printf(
    "%d\t",pNode->data);
    pNode
    =pNode->last;
    }
    while(pNode!=NULL);
    printf(
    "\n");
    }
    摘自: http://topic.csdn.net/u/20081030/15/250b5b04-319b-45fe-a8a7-b079b6380743.html
  • 相关阅读:
    python中的 ' ' 和 " "
    Socket编程, 在server端read()函数调用后显示错误:Transport endpoint is not connected (犯了低级错误)
    我也终于申请了自己的博客。
    山之高
    策略模式-Java实现
    SQL事务的四种隔离级别和MySQL多版本并发控制
    用JAMES实现自己的邮件服务器
    windows mysql 自动备份的几种方法
    Hibernate常见配置详细解释
    慕课网-Linux达人养成计划学习笔记
  • 原文地址:https://www.cnblogs.com/djcsch2001/p/2048097.html
Copyright © 2011-2022 走看看