第四周 项目一- 建立单链表

来源:互联网 发布:统计模型的数据选择 编辑:程序博客网 时间:2024/06/05 20:42

*作者:张栋

*完成时间:2015年9月25日

*题目描述:定义单链表存储结构,用头插法和尾插法建立单链表,,并显示建立好以后的结果

*代码:

#include <stdio.h>#include <malloc.h>typedef int ElemType;typedef struct LNode                                                    //定义单链表结点类型{    ElemType data;    struct LNode *next;                                                 //指向后继结点} LinkList;void CreateListF(LinkList *&L,ElemType a[],int n);                      //头插法建立单链表void CreateListR(LinkList *&L,ElemType a[],int n);                      //尾插法建立单链表void DestroyList(LinkList *&L);                                         //销毁单链表void DispList(LinkList *L);                                             //输出单链表int main(){     LinkList*L1,*L2;     ElemType a[8]={7,9,8,2,0,4,6,3};     CreateListF(L1,a,8);     printf("头插法建表结果:");     DispList(L1);     CreateListR(L2,a,6);     printf("尾插法建表结果:");     DispList(L2);     DestroyList(L1);     DestroyList(L2);     return 0;}void CreateListF(LinkList *&L,ElemType a[],int n)//头插法建立单链表{    LinkList *s;    int i;    L=(LinkList *)malloc(sizeof(LinkList));     //创建头结点    L->next=NULL;    for (i=0; i<n; i++)    {        s=(LinkList *)malloc(sizeof(LinkList));//创建新结点        s->data=a[i];        s->next=L->next;            //将*s插在原开始结点之前,头结点之后        L->next=s;    }}void CreateListR(LinkList *&L,ElemType a[],int n)//尾插法建立单链表{    LinkList *s,*r;    int i;    L=(LinkList *)malloc(sizeof(LinkList));     //创建头结点    L->next=NULL;    r=L;                    //r始终指向终端结点,开始时指向头结点    for (i=0; i<n; i++)    {        s=(LinkList *)malloc(sizeof(LinkList));//创建新结点        s->data=a[i];        r->next=s;          //将*s插入*r之后        r=s;    }    r->next=NULL;           //终端结点next域置为NULL}void DestroyList(LinkList *&L)  //销毁单链表{    LinkList *p=L,*q=p->next;    while (q!=NULL)    {        free(p);        p=q;        q=p->next;    }    free(p);    //此时q为NULL,p指向尾结点,释放它}void DispList(LinkList *L)  //输出单链表{    LinkList *p=L->next;    while (p!=NULL)    {        printf("%d ",p->data);        p=p->next;    }    printf("\n");}
*运行结果:

*知识点总结及心得:

这个程序可以说大部分是自己写下来的,其实当自己写的时候,错误可以说是百出,就拿那个符号来说,要不是输入法不对就是忘记加了,只有当自己写的时候才能发现自己是多么不熟悉,对于以后的博客,自己还是要坚持去独立写出来,自己写出来的,才是自己的收获。然后下面我把升序的代码也拿了出来。

*一个升序的代码:

void CreateListO(LinkList *&L,ElemType a[],int n)  //建立有序(升序)的单链表{    LinkList *s,*r;    int i;    L=(LinkList *)malloc(sizeof(LinkList));     //创建头结点    L->next=NULL;    for (i=0; i<n; i++)    {        r=L; //r指向头结点        s=(LinkList *)malloc(sizeof(LinkList));//创建新结点        s->data=a[i];        s->next=NULL;        while(r->next!=NULL && r->next->data < a[i])  //找到插入点            r = r->next;        s->next=r->next; //将*s插入*r之后        r->next=s;    }}




0 0
原创粉丝点击