【项目1 - 建立单链表】
本次项目的目标是定义单链表存储结构,用头插法和尾插法建立单链表,并显示建立好以后的结果。
测试主函数及函数声明源代码如下:
- <pre name="code" class="cpp">//*Copyright (c)2017,烟台大学计算机与控制工程学院*
- //*All rights reservrd.*
- //*文件名称 :test.cpp*
- //*作者:侯成健*
- //*完成时间:2017年9月21日*
- //*版本号:v1.0*
- //*问题描述:建立单链表*
- //*输入描述:无*
- //*程序输出:无*</pre><pre name="code" class="cpp"><p></p><p></p><pre name="code" class="cpp">#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;
- }</pre><br>
- <br>
- <p></p>
- <p></p>
- 头插法建立链表的源代码如下:
- <p></p>
- <pre name="code" class="cpp">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;
- }
- }</pre>
- <p></p>
- <p><br>
- </p>
- 尾插法建立链表的源代码如下:
- <p></p>
- <pre name="code" class="cpp">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
- }
- </pre><br>
- 销毁单链表的函数源代码如下:
- <p></p>
- <p></p>
- <pre name="code" class="cpp">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指向尾结点,释放它
- }</pre>
- <p></p>
- <p><br>
- </p>
- 输出单链表的函数源代码如下:
- <p></p>
- <pre name="code" class="cpp">void DispList(LinkList *L) //输出单链表
- {
- LinkList *p=L->next;
- while (p!=NULL)
- {
- printf("%d ",p->data);
- p=p->next;
- }
- printf("\n");
- }</pre>
- <p><br>
- <br>
- 运行结果截图如下:</p>
- <p><img src="https://img-blog.csdn.net/20170927112544449?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzg4NTM3NTk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt=""><br>
- <br>
- <br>
- </p>
- <pre></pre>
- <pre></pre>
- <pre></pre>
- <pre></pre>
- <pre></pre>
- </pre>