• 第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;
    }

  • 相关阅读:
    Delegte的BeginInvoke
    C# socket 实现客户端连续发送数据
    Button的PerformClick()
    Invoke和BeginInvoke
    Application.DoEvents() 处理队列消息,防界面假死
    BackgroundWorker后台线程
    CF773F
    ORM框架,没必要搞那么复杂
    VS Unable to copy file
    Unbuntu auto start program
  • 原文地址:https://www.cnblogs.com/sxy201658506207/p/7586252.html
Copyright © 2020-2023  润新知