您的位置:首页 > 其它

C-链表

2016-06-15 00:41 281 查看

单链表

每个节点设置一个数据域,一个指针域(用以指向其后继节点)。

设单链表节点类型用LinkList表示

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


对于基础薄弱的人,可以看下这里的说明

typedef:表示将“struct data”用“LinkList”代替

ElemType:通用类型标识符,简单说你可以用任意类型替代它,如“int、char”等

struct LNode *next:这里之所以用“LNode”,是因为源码至上向下编译,所以在结构体内时,还不知“LinkList”是什么意思

单链表建立

尾插法

个人认为这种要好理解一点,方便记忆

void CreateList(LinkList * &L,ElemType a[],int n)
{
LinkList *s,*r;
L = (LinkList *)malloc(LinkList);
r = L;
for(i=0;i<n;i++)
{
s = (LinkList *)malloc(LinkList);
s->data = a[i];
r->next = s;
r = s;
}
r->next = NULL;
}


头插法

这种写起来很简单,不过节点次序和原数组次序相反

void CreateList(LinkList * &L,ElemType a[],int n)
{
LinkList *s;
L = (LinkList *)malloc(LinkList);
L = NULL;
for(i=0;i<n;i++)
{
s = (LinkList *)malloc(LinkList);
s->data = a[i];
s->next = L->next;
L->next = s;
}
}


单链表输出

void DispList(LinkList *L)
{
LinkList *p= L->next;
while(p!=NULL)
{
printf("%d",p->data);
p = p->next;
}
}


其实很多新手看来上面的,心中还是云里雾里。这里,我贴出一个完整的小例子,供大家学习参考。

#include<stdio.h>
#include<stdlib.h>
typedef struct LNode
{
int data;
struct LNode *next;
}LinkList;
int main()
{
int i,a[5] = {1,2,3,4,5};
LinkList *head,*p,*tail;
head = (LinkList *)malloc(sizeof(LinkList));
tail = head;
for(i=0;i<5;i++)
{
p = (LinkList *)malloc(sizeof(LinkList));
p->data = a[i];
tail->next = p;
tail = p;
}
tail->next = NULL;
p = head->next;
while(p!=NULL)
{
printf("%d\t",p->data);
p = p->next;
}
printf("\n");
return 0;
}


4000

最初写例子做测试的时候,习惯把所有程序写在主程序中。新手进行查看时可以很直观,不用考虑太多。不过,这样会导致代码不整洁,冗余严重。大家可以自行分离,加深对程序的理解。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: