链表的一些总结:
带头结点递增数列的链表的插入
List Insert( List L, ElementType X ){
List now=L,p = (List)malloc(sizeof(List));
p->Data = X;
p->Next=NULL;
while(now->Next&&now->Next->Data<X)now=now->Next;
p->Next=now->Next;
now->Next=p;
return L;
}
链表判断为空的条件:
1.带头结点:p->Next不为空
2.不带头节点:p不为空
typedef:
在声明struct前使用可以在后来创建结构体变量的时候省去struct;*Node可以在后面建立结构体指针时直接用Node+变量名:
typedef struct Node
{
int data;
Node *Next;
}*TNode;
int main()
{
TNode p=NULL;
}
带头结点链表的建立:
具有声明好的结构体变量:
Node L;
TNode p=NULL;
Node *now=&L;
int n=5;
while(n--){
p=(struct Node*)malloc(sizeof(struct Node));
scanf("%d",&p->data);
now->Next=p;
now=p;
now->Next=NULL;
p->Next=NULL;
}
直接从指针建立链表:
1.
List * CreateList(){
List *head,*p1,*p2;
int x;
head=(struct List*)malloc(sizeof(struct List));
p1=head;
scanf("%d %s",&x,head->sname);
head->sno=x;
while(1){
scanf("%d",&x);
p2=(struct List*)malloc(sizeof(struct List));
scanf("%s",p2->sname);
p2->sno=x;
p1->next=p2;
p1=p2;
p1->next=NULL;
if(x==-1)break;
}
return head;
}
List * Find(List *head, int no){
List *p=head;
while(p!=NULL){
if(p->sno==no)return p;
p=p->next;
}
return NULL;
}
2.
void CreateList(LinkList &L, int n) {
LinkList p;
int length=0;
L = new LNode;
L->next = NULL;
while (length<n) {
p = new LNode;
cin >> p->data;
p->next=L->next
L->next=p
length++;
}
}