C-链表

来源:互联网 发布:遥感数据下载 编辑:程序博客网 时间:2024/06/04 19:15

单链表

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

设单链表节点类型用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;}

最初写例子做测试的时候,习惯把所有程序写在主程序中。新手进行查看时可以很直观,不用考虑太多。不过,这样会导致代码不整洁,冗余严重。大家可以自行分离,加深对程序的理解。

0 0
原创粉丝点击