正文

我所理解的链表022005-12-07 08:46:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/goal00001111/7911.html

分享到:

/----------线性表的单链表基本操作的算法实现------------ //我给链表设置了一个头结点,虽然它的数据域毫无意义,但它作为一个指针却意义非凡! //它的作用我们在下面的例程中可以领教 LinkList InitList(void) //构造一个空的线性表 {     LNode Head;               Head = (LNode)malloc(sizeof(struct Node)); //为链表的头结点分配空间     if(!Head)     {         printf("Out of space!");         return NULL;     }     Head->next = NULL;     return Head;//返回头结点 }   void DestroyList(LinkList *L)//初始条件:线性表L已存在。 操作结果:销毁线性表L。 {    LNode Head, P;         if(*L)//若线性表L已存在     {         Head = *L;         P = Head->next;         while(!P)  //把链表中除头结点外的所有结点释放         {             free(Head);             Head = P;             P = Head->next;               }         free(Head); //释放头结点     } }       LinkList MakeEmpty(LinkList L)//初始条件:线性表L已存在。 操作结果:将线性表L重置为空表。 {    LNode Head, P;       Head = *L;     P = Head->next;     while(!P)//把链表中除头结点外的所有结点释放     {         free(Head);         Head = P;         P = Head->next;         }     return (Head); //返回头结点 }   int IsEmpty(LinkList L);//初始条件:线性表L已存在。 操作结果:判断线性表是否为空表。 {     return L->next == NULL; }   int ListLength(LinkList L)//初始条件:线性表L已存在。 操作结果:返回线性表L结点的个数。 {     LNode P = L->next;     int num = 0;           while(P) //累积线性表L结点的个数     {         num++;         P = P->next;     }    return num;  //返回线性表L结点的个数 }   //初始条件:线性表L已存在。 操作结果:返回线性表L的最后一个结点(尾结点)。 LNode IsLast(LinkList L) {     LNode P = L->next;         if(P)     {         while(P->next) //遍历线性表L             P = P->next;     }     return P;  //返回线性表L的最后一个结点,若为空表则返回NULL }   LNode NewLNode(ElemType X)//构造一个数据域为X的新结点 {     LNode S;         S = (LNode)malloc(sizeof(struct Node))//为新结点分配空间     if(!S)     {         printf("Out of space!");         return NULL;     }     S->data = X;     S->next = NULL;     return S;//返回新结点 }   //线性表L已存在。 操作结果:在线性表L中寻找值为X的结点,若找到则返回该结点的前驱,否则返回NULL。 LNode FindPrefious(ElemType X, LinkList L) {     LNode P = L;         while(P->next && P->next->data != X)//遍历链表寻找值为X的结点         P = P->next;     if(!P->next)  //如果找不到值为X的结点,返回NULL         return NULL;     else         //若找到则返回该结点的前驱P         return P;    }                            void ListDelete(LNode Pre)//初始条件:线性表L中结点P已找到。 操作结果:删除该结点。 {     LNode P = Pre->next;         Pre->next = P->next;     free(P); } //初始条件:线性表L中结点P已找到,新结点S已构造。。操作结果:在该结点之前插入新结点X。 void ListInsert(LNode Pre, LNode S) {     S->next = Pre->next;     Pre->next = S; }

阅读(2514) | 评论(1)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册