13.1.22:线性表之单链表

  1 /*
  2 1.不带头结点的单链表。
  3 2.需要修改,有引用在里面,只是伪代码。
  4 
  5 
  6 Levi.
  7        date:2013.1.22
  8 */
  9 
 10 #include <stdio.h>
 11 #include "sys/malloc.h"
 12 #include <stdlib.h>
 13 
 14 typedef struct LNode{
 15     TypeElem data;
 16     struct LNode *next;
 17 };
 18 
 19 typedef struct LNode * LinkList;
 20 
 21 void InitList(LinkList *L){
 22     *L=NULL;
 23 }
 24 
 25 void ClearList(LinkList *L){
 26     LinkList p;
 27     while(L){        
 28         p=L;
 29         L=p->next;
 30         free(p);
 31         p=NULL;
 32     }
 33 }
 34 
 35 void ListEmpty(LinkList L){
 36     if(L)
 37               printf("The L is not NULL\n");
 38     else
 39               printf("The L is NULL\n");
 40               
 41 }
 42 
 43 int ListLength(LinkList L){
 44     LinkList p;
 45     p=L;
 46     int count=0;
 47     while(p){
 48         p=p->next;
 49         ++count;
 50     }
 51     return count;
 52 }
 53 
 54 int GetElem(LinkList L,int i,ElemType *e){
 55     LinkList p;
 56     p=L;
 57     int count=1;
 58     while(p&&count<i){
 59         p=p->next;
 60         ++count;
 61     }
 62     if(!p||count>i){
 63         printf("Get error !!\n");
 64         return 0;
 65     }
 66     p->data=*e;
 67     return 0;
 68 }
 69 
 70 int LocateElem(LinkList L,ElemType e){
 71     int i=1;
 72     LinkList p=L;
 73     while(p&&p->data!=e){
 74         p=p->next;
 75         i++;
 76     }
 77     if(!p)
 78               return -1;
 79     else
 80               return i;
 81 }
 82 
 83 int ListInsert(LinkList &L,int i,ElemType e){
 84     int j=1;
 85     LinkList s,p=L;
 86     if(i<1)
 87               return -1;
 88     s=(LinkList)malloc(sizeof(struct LNode));
 89     s->data=e;
 90     if(i==1){
 91     s->next=L;
 92     L=s;
 93     }
 94 
 95     else{
 96         while(p&&j<i-1){
 97             p=p->next;
 98             ++j;
 99         }
100         if(!p)
101                   return -1;
102         s->next=p->next;
103         p->next=s;
104 
105     }
106     return 0;
107 }
108 
109 int ListDelete(LinkList &L,int i,ElemType *e){
110     int j=1;
111     LinkList p=L,q;
112     if(i<1)
113               return -1;
114     else if(i==1){
115         L=p->next;
116         *e=p->data;
117         free(p);
118         
119     }
120 
121     else{
122         while(p->next&&j<i-1){
123             ++j;
124             p=p->next;
125         }
126         if(!p>next||j>i-1)
127                   return -1;
128         q=p->next;
129         p->next=q->next;
130         *e=q->data;
131         free(q);
132 
133     }
134     return 0;
135 }
136 
137 void ListTraverse(LinkList L,void(*vi)(int)){
138     LinkList p=L;
139     while(p){
140         vi(p->data);
141         p=p->next;
142     }
143     printf("\n");
144 }
145 
146 
147 
148     

 

posted @ 2013-01-22 21:45  Levi_随云  阅读(243)  评论(0编辑  收藏  举报