第四周 项目1 建立单链表
2015-09-21 17:24
295 查看
/* * 烟台大学计算机与控制工程学院 *文件名称:main.cpp *作 者:王旭 *完成日期:2015年9月16日 *版 本 号:v1.0 * *问题描述:测试“建立线性表”的算法CreateList, 实现“输出线性表”的算法DispList。 实现判断线性表是否为空的算法ListEmpty 增加求线性表的长度ListLength的函数并测试; 增加求线性表L中指定位置的某个数据元素GetElem的函数并测试; 增加查找元素LocateElem的函数并测试; 插入数据元素ListInsert; 删除数据元素ListDelete; 初始化线性表InitList; 销毁线性表DestroyList ; 采用多文件的形式。 * *输入描述:输入你要查找的元素和你要查找的位置 *程序输出:给出所查找的数据元素的位置,以及给出的位置的元素 */
头文件和主函数:
#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"); }
总结:
建立单链表最难的地方是理解头插法和尾插发的精髓,领会算法的含义。
最容易犯得错误是容易被指针指来指去的弄迷糊。
销毁单链表不能忘记free(q)。
尾插发不能忘记最后加一个r->=NULL。
相关文章推荐
- 第四周项目三(1)
- 第四周-项目5-猴子选大王
- Hibernate(一)——使用SchemaExport生成数据表
- PHP设计模式——适配器模式(Adapter)
- 第三周项目--线性表
- 会议室开发项目的总结
- 安卓:ContetnResolver之查询显示联系人信息及对其的操作
- 关于子函数变量生命周期以及指针的一些问题
- 1005. 继续(3n+1)猜想 (25)
- Java中 List、Set、Map
- Java程序的运行机制和JVM
- 个人C++ 编码规范
- 第3周SHH数据结构—【项目3 - 求集合并集】
- 【第4周 项目1 - 建立单链表】
- linux自学心得之--安装内核头文件
- 第4周、项目1—建立单链表
- Could not execute auto check for display colors using command /usr/bin/xdpyinfo.(
- 从标准输入读取C源代码,并验证所有的花括号都正确的成对出现
- Java:按值传递还是按引用传递详细解说
- Debian软件包管理工具apt-get和dpkg操作备忘