zoukankan      html  css  js  c++  java
  • 第4周实践项目1 建立单链表(非多组织结构)

    #include <stdio.h>
    #include <malloc.h>
    typedef int ElemType;
    typedef struct LNode        //定义单链表结点类型
    {
        ElemType data;
        struct LNode *next;     //指向后继结点
    } LinkList;
    void DestroyList(LinkList *&L)  //销毁单链表,之所以把这个销毁链表的函数放在第一个是为了要注重使用一下如何这个使用函数
    {
        LinkList *p=L,*q=p->next;//每次q指向p的下一个节点,free(p),直到q为NULL的时候,当循环体执行完的时候还剩下最后一个p节点没有free
        while (q!=NULL)
        {
            free(p);
            p=q;
            q=p->next;
        }
    	free(p);//此时销毁最后一个节点p
    /*	LinkList *p=L,*q=L->next;//自己改动了一行代码,功能一样
    	while(q)
    	{
    		free(p);
    		p=q;
    		q=q->next;
    	}
        free(p);    //此时q为NULL,p指向尾结点,释放它
    */
    }
    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 DispList(LinkList *L)  //输出单链表
    {
        LinkList *p=L->next;
        while (p!=NULL)
        {
            printf("%d ",p->data);
            p=p->next;
        }
        printf("
    ");
    }
    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, 8);
        printf("尾插法建表结果:");
        DispList(L2);
        DestroyList(L1);
        DestroyList(L2);
        return 0;
    }

  • 相关阅读:
    sql datepart ,dateadd,datediff,DateName函数
    DEV控件:gridControl常用属性设置
    师兄建议:
    .GRIDVIEW奇偶行变色
    C#中在主窗体中用ShowDialog方法显示子窗体的使用技巧
    Dev 控件lookUpEdit的数据绑定及其获取从UI界面赋给lookupedit的值
    从VS界面把图片导入数据库:①:把图片转换为二进制数据,②再把二进制数存进数据库
    YYKit之YYText
    分享使用method swizzling的经历
    autoreleasepool的笔记
  • 原文地址:https://www.cnblogs.com/sxy201658506207/p/7586252.html
Copyright © 2011-2022 走看看