第四周 项目1 建立单链表

/**烟台大学计算机与控制工程学院*文件名称: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 建立单链表

相关文章:

你感兴趣的文章:

标签云: