数据结构之线性表(链式表示之单链表)

定义: 线性表的链式存储又称单链表

typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;

基本操作:
头插法建立单链表:

LinkList List_HeadInsert(LinkList &L){
LNode *s;int x;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
scanf("%d",&x);
while(x!=9999){
s=(LNode*)malloc(sizeof(LNode));
s->data=x;
s->next=L->next;
L->next=s;
scanf("%d",&x);
}
return L;
}

最坏时间复杂度:O(n)

尾插法建立单链表:

LinkList List_TailInsert(LinkList &L){
int x;
L=(LinkList)malloc(sizeof(LNode));
LNode *s,*r=L;
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;
}

最坏时间复杂度:O(n)

按序号查找操作:

LNode *GetElem(LinkList L,int i){
int j=1;
LNode *p=L->next;
if(i==0)
return L;
if(i<1)
return NULL;
while(p&&j<i){
p=p->next;
j++;
}
return p;
}

最坏时间复杂度:O(n)

按值查找操作:

LNode *LocateElem(LinkList L,ElemType e){
LNode *p=L->next;
while(p!=NULL&&p->data!=e)
p=p->next;
return p;
}

最坏时间复杂度:O(n)

插入节点操作:

p=GetElem(L,i-1);
s->next=p->next;
p->next=s;

删除节点操作:

p=GetElem(L,i-1);
q=p->next;
p->next=q->next;
free(q);

(优化)删除给定节点 *p:

q=p->next;
p->data=p->next->data;
p->next=q->next;
free(q);

求表长:

int k=0;
p=head;
while(p->next!=NULL){
k++;
p=p->next;
}

你可能感兴趣的:(数据结构)