1、顺序存储与链式存储的区别
顺序存储可以随机存取,即可以随时存或取表中的任何一个位置的元素,不需要遍历,但插入以及删除时需要移动大量元素。顺序存储需要大量的连续的存储单元。
链式存储则相反。链式存储浪费了指针域的空间。
2、头插法建立单链表
思想:(1)创建头结点,指向空
(2)循环输入值
(3)创建结点,将值放入进去。
LinkList ListByHead(LinkList &L){
LNode *s;int x;
L=(LinkList)malloc(sizeof(LNode)); //创建头结点
L->next=null;
scanf("%d",&x);
while(x!=99999){
s=(LNode*)malloc(sizeof(LNode)); //创建新结点
s->data=x;
s->next=L->next;
L->next=s;
scanf("%d",&x);
}
reyurn L;
}
3、尾插法建立单链表
思想:(1)创立头结点L、以及一个尾指针r
(2)尾指针刚开始时指向L
(3)循环输入数据
(4)创立新结点 s
(5)尾指针r的next域指向s
(6)r指向新的尾结点
LinkList ListByTail(LinkList &L){
LNode *s,r=L;
int x;
L=(LinkList)malloc(sizeof(LNode));
scanf("%d",&x);
while(x!=9999){
s=(LNode*)malloc(sizeof(LNode));
s->data=x;
r->next=s;
r=s;
scanf("%d",&x);
}
r->next=null; //尾结点置空
return L;
}
4、按序号查找结点值(很重要,可以进行对第i个结点的插入与删除,找到第i-1个结点)
思想:用j记录位置,当j=i时便找到了
Lnode * GetElem(LinkList L,int i){
int j=1;
LNode *p=L->Next;
if(i==0)
return L;
if(i<0)
return Null;
while(j<i){
p=p->next;
j++;
}
return P;
}
//在第i个结点出插入一个结点
P=getElem(L.i-1);
r->next=P->next;
p->next-r;
//删除第i个结点,必须知道
p=getElem(L,i-1);
q=p->next;
p->next=q->next; //中间两步可以成为p->next=p->next->next;
free(q);
5、按值查找结点
LNode * LocateElem(LinkList L,ElemType e){
LNode *p=L->next;
while(p!=Null&&P->data!=e){ //注意判断指针不能为空,指针为空了就到了链表的尾部了
p=p->next;
}
return p; //查询不到返回的p是空的
}
6、

5842

被折叠的 条评论
为什么被折叠?



