【数据结构】单链表的实现

源代码

typedef struct SingleNode
{ 	ElemType data;         
    struct SingleNode *next;  } 
SingleLinkedList,*LinkList;


void  ListInitialize (SingleLinkedList **head)                    
/*如果有内存空间,申请头结点空间并使头指针head指向头结点*/
 {  
	if((*head = (SingleLinkedList *)malloc(sizeof(SingleLinkedList))) == NULL)
             exit(1);
       (*head)->next = NULL;             /*置链尾标记NULL */
}


int  ListLength (SingleLinkedList *head)
{   
    SingleLinkedList *p = head;                          /*p指向头结点*/ 
    int size = 0;                                       /*size初始为0*/   
    while(p->next != NULL)                                /*循环计数*/
    {          p = p->next;
               size ++; 
    }   
    return size;
}


int  ListInsert (SingleLinkedList *head, int i, ElemType x)
/*在带头结点的单链表head的数据元素ai(0 ≤ i ≤ size)结点前*/
/*插入一个存放数据元素x的结点*/
{   
    SingleLinkedList *p, *q;
    int j;
    p = head;                                    /*p指向头结点*/
    j = -1;                                           /*j初始为-1*/
    while(p->next != NULL && j < i - 1)      /*最终让指针p指向数据元素ai-1结点*/
    {   
        p = p->next;
        j++;
    }
    if(j != i - 1)
    {  
        printf("插入位置参数错!");
        return 0;
    }
    /*生成新结点由指针q指示*/
    if((q = (SingleLinkedList *)malloc(sizeof(SingleLinkedList)))  == NULL)
            exit(1);
    q->data = x;
    q->next = p->next;                         /*给指针q->next赋值*/
    p->next = q;                                   /*给指针p->next重新赋值*/
    return 1;
}


int  ListDelete (SingleLinkedList *head, int i, ElemType *x)
/*删除带头结点的单链表head的数据元素ai(0 ≤ i ≤ size - 1)结点*/
/*删除结点的数据元素域值由x带回。删除成功时返回1;失败返回0*/
{
    SingleLinkedList *p, *s;
    int j;
    p = head;                           /*p指向头结点*/
    j = -1;                                /*j初始为-1*/
    while(p->next != NULL && p->next->next!= NULL && j < i - 1) 
     /*最终让指针p指向数据元素ai-1结点*/
    {
        p = p->next;
        j++;
    }
    if(j != i - 1)
    {  
        printf(“删除位置参数错!");
        return 0;
    }
    s = p->next;                        /*指针s指向数据元素ai结点*/
    *x = s->data;                      /*把指针s所指结点的数据元素域值赋予x*/
    p->next = s->next;                 /*把数据元素ai结点从单链表中删除掉*/
    free(s);                                /*释放指针s所指结点的内存空间*/
    return 1;
}


void  ListDestroy (SingleLinkedList  **head)
{   
       SingleLinkedList *p, *p1;
       p = *head;
      while(p != NULL)
     {  
          p1 = p;
          p = p->next;
          free(p1);
      }
     *head = NULL;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值