数据结构【线性表(二)链表】项目一--建立单链表
2015-09-21 17:15
543 查看
/*
*数据结构【线性表(二)--链表】项目一--建立单链表
*Copyright (c) 2015 烟台大学计算机与控制工程学院
*All right reserved.
*文件名称:danlianbiao.cpp
*标题:数据结构——线性表之建立单链表
*分类:数据结构 建立单链表
*writer:罗海员
*date:2015年9月15日
*版本:V1.0.1
*操作系统:XP
*运行环境:VC6.0
*问题描述:定义单链表存储结构,用头插法和尾插法建立单链表,并显示建立好以后的结果。
**附加一个建立有序(升序)的单链表的函数void CreateListO,已将建立好的单链表进行有顺序(升序)排序。
*提示:
1. 定义单链表存储结构,用头插法和尾插法建立单链表,并显示建立好以后的结果。
2.复杂度的要求,设计算法并用专门的函数实现算法;
3.理论与实践相结合
*输入描述:无输入(固定的输入)
*算法库包括两个文件:
头文件:list.h,包含定义顺序表数据结构的代码、宏定义、要实现算法的函数的声明;
源文件:包含实现各种算法的函数的定义和测试代码main函数和四个函数
(1)void CreateListF(LinkList *&L,ElemType a[],int n);//头插法建立单链表
(2)void CreateListR(LinkList *&L,ElemType a[],int n);//尾插法建立单链表
(3)void DestroyList(LinkList *&L); //销毁单链表
(4)void DispList(LinkList *L); //输出单链表
*程序输出:(如下图)
*/
*数据结构【线性表(二)--链表】项目一--建立单链表
*Copyright (c) 2015 烟台大学计算机与控制工程学院
*All right reserved.
*文件名称:danlianbiao.cpp
*标题:数据结构——线性表之建立单链表
*分类:数据结构 建立单链表
*writer:罗海员
*date:2015年9月15日
*版本:V1.0.1
*操作系统:XP
*运行环境:VC6.0
*问题描述:定义单链表存储结构,用头插法和尾插法建立单链表,并显示建立好以后的结果。
**附加一个建立有序(升序)的单链表的函数void CreateListO,已将建立好的单链表进行有顺序(升序)排序。
*提示:
1. 定义单链表存储结构,用头插法和尾插法建立单链表,并显示建立好以后的结果。
2.复杂度的要求,设计算法并用专门的函数实现算法;
3.理论与实践相结合
*输入描述:无输入(固定的输入)
*算法库包括两个文件:
头文件:list.h,包含定义顺序表数据结构的代码、宏定义、要实现算法的函数的声明;
源文件:包含实现各种算法的函数的定义和测试代码main函数和四个函数
(1)void CreateListF(LinkList *&L,ElemType a[],int n);//头插法建立单链表
(2)void CreateListR(LinkList *&L,ElemType a[],int n);//尾插法建立单链表
(3)void DestroyList(LinkList *&L); //销毁单链表
(4)void DispList(LinkList *L); //输出单链表
*程序输出:(如下图)
*/
<span style="font-size:12px;">//定义单链表存储结构,用头插法和尾插法建立单链表,并显示建立好以后的结果。 //包含定义顺序表数据结构的代码、宏定义、要实现算法的函数的声明 #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; } } </span>
相关文章推荐
- Lua教程(七):数据结构详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#数据结构揭秘一
- C#定义并实现单链表实例解析
- 数据结构之Treap详解
- C语言实现单链表逆序与逆序输出实例
- C语言单链表常见操作汇总
- JavaScript数据结构和算法之图和图算法
- Java数据结构及算法实例:冒泡排序 Bubble Sort
- C数据结构之单链表详细示例分析
- Java数据结构及算法实例:插入排序 Insertion Sort
- Java数据结构及算法实例:考拉兹猜想 Collatz Conjecture
- java数据结构之java实现栈
- java数据结构之实现双向链表的示例
- Java数据结构及算法实例:选择排序 Selection Sort
- Java数据结构及算法实例:朴素字符匹配 Brute Force
- Java数据结构及算法实例:汉诺塔问题 Hanoi
- Java数据结构及算法实例:快速计算二进制数中1的个数(Fast Bit Counting)
- java数据结构和算法学习之汉诺塔示例
- Java数据结构及算法实例:三角数字