数据结构实验报告

更新时间:2023-07-23 23:05:41 阅读: 评论:0

课程名称      数据结构       
专业班级:      计算机辅修一班
    号:      财大1309100108     
    名:        徐倬迅         
指导教师:        袁凌     
报告日期:        2015623     
计算机科学与技术

目录   
实验一 基于顺序结构的线性表实现    1
1.1问题描述    1
1.2系统设计    1
1.3.系统实现    2
1.4效率分析    5
实验二 基于链式结构的线性表实现    5
2.1问题描述    5
2.2系统设计    5
2.3系统实现    6
2.4效率分析    10
四 实验总结与评价    10

实验一 基于顺序结构的线性表实现
1.1问题描述
    基于顺序存储结构,实现线性表的基本的、常见的运算。
1.2系统设计
    1.2.1提供12个功能,分别是:
1. InitiaList
2. DestroyList
3. ClearList
4. ListEmpty
5. ListLength
6. GetElem     
副食
7. LocatElem
8. PriorElem
9. NextElem
10. ListInrt
11. ListDelete
12. ListTrabver
                     
lolly1.2.2物理结构为顺序存储结构,数据元素为包含一个整型变量的结构体:
typedef struct{
    int item1;
    }Elemtype;
有声书typedef struct{
    Elemtype * elem;
    int length;
    int listsize;
    }SqList;
1.2.3构建线性表之前先声明一个头结点,用于存储该表的基本信息和首结点地址:
SqList L1, L2;//声明头结点
1.2.4文件预处理
出版社英文
#include<stdio.h>
#include<stdlib.h>
#define TRUE 1;
#define FALSE 0;
#define OK 2;
#define ERROR -1;
#define OVERFLOW -2;
typedef int status;
#define LIST_INIT_SIZE 100;
#define LISTINCREMENT 10;//预处理
1.3.系统实现
1.3.1    InitialList功能
初始化线性表,传入的是头结点地址。申请一个大小为LIST_INT_SIZE、类型为Elemtype的线性存储空间,并用头结点中的首结点指针指向该空间首地址。具体实现如下:
status IntiaList(SqList * L) {
    L->elem = (Elemtype*)malloc(LIST_INIT_SIZE*sizeof(Elemtype));
    if(!L->elem)
        exit(OVERFLOW);
    L->length = 0;
    L->listsize = LIST_INIT_SIZE;
    return OK;
    }// IntiaList
上海演讲
1.3.2    DestroyList功能
销毁头结点中首结点址针指向的线性存储空间,传入的是头结点地址。具体实现如下:
status DestroyList(SqList * L){
    if(L->elem != NULL)
    {
        free(L->elem);
po是什么意思
        RetSqList(L);
    }
    el
        return ERROR;
    return OK;
    }// DestroyList
1.3.3    ClearList功能
与Destroy类似但是又有不同,ClearList并不销毁物理空间,而是修改逻辑关系值:
status ClearList(SqList * L){
    if(L->elem == NULL)
        return ERROR;
    L->length = 0;
    return OK;//ClearList
1.3.4    ListEmpt功能
判空功能,判断表是否为空表。传入的是头结点值,而非地址,因为不需要对头结点进行修改。实现如下:
status ListEmpty(SqList L){diplomacy
    if(L.elem == NULL)
        return ERROR;
    if(0 == L.length)
        return TRUE;
    el
        return FALSE;//ListEmpty
1.3.5    ListLenth功能
求表长功能,由于创建过程中已经把表长信息包含在头结点中,所以直接调用并显示即可:
    int ListLength(SqList L){
        if(L.elem == NULL)
            return ERROR;
        return L.length;
}//ListLenth
1.3.6    GetElem功能
获取第i号元素,传入的是头结点值、元素编号i、以及出口表结点地址。
status GetElem(SqList L,int i,Elemtype * e){
        if(i<1 || i>L.length)
            return ERROR;
        el{
            *e=L.elem[i-1];
            return OK;
        }
    }//GetElem
1.3.7    LocatElem功能
获取指定元素编号,传入头结点值、存储了所需元素信息的一个临时表结点值、equal函数地址。采用顺序比较法从表头遍历并比较,一旦找到,返回编号i。时间复杂度为,O(n)。
int LocatElem(SqList L,Elemtype e,status (* compare)(Elemtype ,Elemtype )){
        if(L.elem==NULL)
            return ERROR;
        int i;
        for(i=L.length  i>0  i--)
        {
            if(compare(e,L.elem[i-1]))
                return i;
        }
        return --i;
        }//LocatElem
1.3.8    PriorElem功能
求指定元素的前一个元素的内容,传入头结点值、包含指定元素信息的一个临时表结点值、存储前一个元素的表结点地址。主要思路是先调用LocatElem确定指定元素的位置,如果不是首结点则可直接取到PriorElem的地址。时间复杂度为O(n)。具体实现如下:
status PriorElem(SqList L,Elemtype cur,Elemtype * pre_e){
        if(L.elem==NULL)
            return ERROR;
        int i=LocatElem(L, cur, equal);
        if(i<=1)
            return ERROR;
        el{
            assignEle(pre_e,L.elem[i-2]);
            return OK;
        }
    }//PriorElem
esntial
1.3.9    NextElem功能
    status NextElem(SqList L,Elemtype cur,Elemtype * next_e){
        if(L.elem==NULL)
            return ERROR;
        int i=LocatElem(L, cur, equal);
        if(i==L.length && i==0)
            return ERROR;
        el{
            assignEle(next_e,L.elem[i]);
            return OK;
        }
    }//NextElem
1.3.10    ListInrt功能
插入一个数据元素,传入头结点地址、插入位置i、临时表结点值。在调用插入函数前构造一个临时表结点,用于存储数据元素信息。进入插入子函数,插入前先判断插入位置是否合理,再判断是否“满载”。如果满载则重新申请更大的存储空间。接下来正式插入数据元素,“先空位置再插入”。平均时间复杂度为  ,O(n),n即listlenth。
bad boysstatus ListInrt(SqList * L,int i,Elemtype e){
        if(i<1 || i>L->length+1)
            return ERROR;
        if(L->length >= L->listsize)nel
        {
            Elemtype *newba = (Elemtype *)realloc(L->elem,  (L->listsize+LISTINCREMENT)*sizeof(Elemtype));
            if(!newba)
                exit(OVERFLOW);
            L->elem = newba;
            L->listsize += LISTINCREMENT;
        }
        Elemtype *inrt = &(L->elem[i-1]);
        Elemtype *cur=&(L->elem[L->length-1]);
        for(  cur>=inrt  cur--)
        {
            *(cur+1) = *cur;
        }
        *inrt = e;
        ++L->length;
        return OK;
    }//ListInrt
1.3.11    ListDelete功能
status ListDelete(SqList * L,int i,Elemtype * e){
        if(i<1 || i>L->length)
            return ERROR;
        assignEle(e, L->elem[i-1]);

本文发布于:2023-07-23 23:05:41,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/78/1113479.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:结点   元素   插入   地址
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图