数据结构实验报告

更新时间:2023-06-30 14:35:39 阅读: 评论:0

《数据结构》实验报告一
实验内容:  线性表 
学号: 20085101021             怎么上传图片 姓名:  梁闪星补办身份证要多久 
一、上机实验的问题和要求(需求分析)
  2.线性表合并运算
 两个数据元素按值非递减有序排列的线性表,要求将二者归并为一个新表,新表中的数据元素仍按值非递减有序排列。要求分别采用顺序和链式两种存储结构.
二、程序设计的基本思想,原理和算法描述:
2.若采用顺序存储结构,首先动态分配一个线性表Lc,并使papbpc分别指向LaLb生死场读后感Lc的基址,然后算出LaLb的长度,在papb所指元素都在LaLb中时,把其中较小的一个插入到Lc中,并使指向较小元素的指针和pc分别加1。直到其中一个线性表中的元素全部插入到Lc中,把另一个线性表中的剩余元素也顺序全部插入Lc中。
若采用链式存储结构,首先设立三个指针pa凉拌黄瓜胡萝卜pbpc,其中pa,pb分别指向La表和Lb表中当前待比较插入的结点,而pc指向Lc中的当前最后一个结点,若pa->data<=pb->data,则将pa所指结点链接到pc所指结点之后,否则将pb所指结点链接到pc所指结点之后。当一个为空时,说明有一个表的元素已归并完,则只要将另一个表的剩余段链接在pc所指结点之后即可。
三、调试和运行程序过程中产生的问题及采取的措施:
  调用函数时,参数传递错误。通过一步一步调试根据提示进行修改。
四、源程序及注释
#include<stdio.h>
#include<stdlib.h>
#define  INITSIZE  100 //线性表存储空间的初始分配量
#define  LISTINCREMENT  10 //线性表存储空间的分配增量
#define  OK  1
#define  ERROR  0
#define  OVERFLOW  -1
typedef  int  ElemType;
typedef  int  Status;
typedef struct{
    关于爱的古诗ElemType *elem; //存储空间基址
    int    length;  //当前长度
    int    listsize; //当前分配的存储量(以sizeof(ElemType)为单位)
}SqList;
Status InitList(SqList &L)
{//构造一个空的顺序表L.
  L.elem=(ElemType*)malloc(100*sizeof(ElemType));
  if(!L.elem)exit(OVERFLOW);
  L.length=0;
  L.listsize=INITSIZE;
  return(OK);
}
void Assign(SqList &L)
{//为顺序表一个人的战役L的各元素赋值。
    int i,N;
    printf("Plea input the Number of the SqList:");
    scanf("%d",&N);
    printf("Plea input the elements:");
    for(i=0;i<N;i++);{
        scanf("%d",&L.elem[i]);宝宝洗澡水温
        L.length++;
    }
}
void MergeList(SqList La,SqList Lb,SqList &Lc){
    //已知线性表LaLb中的数据元素按值非递减排列
    //归并LaLb得到新的线性表LcLc的数据元素也按值非递减排列
    ElemType *pa,*pb,*pc,*pa_last,*pb_last;
    pa=La.elem;
    pb=Lb.elem;
    Lc.listsize=Lc.length=La.length+Lb.length;
    pc=Lc.elem=(ElemType*)malloc(Lc.listsize*sizeof(ElemType));
    if(!Lc.elem)exit(OVERFLOW);//存储分配失败
    pa_last=La.elem+La.length-1;
    pb_last=Lb.elem+Lb.length-1;
    while(pa<=pa_last&&pb<=pb_last){//归并
    if(*pa<=*pb) *pc++=*pa++;
    el *pc++=*pb++;
        }
    while(pa<=pa_last)  *pc++=*pa++;//插入La的剩余元素
湖南中小学教师发展网    while(pb<=pb_last)  *pc++=*pb++;//插入Lb的剩余元素
    }//MergeList_Sq
void ListTraver(SqList L){
//遍历顺序表L
    int i;
    for(i=0;i<=L.length-1;i++);
    printf("%d  ",L.elem[i]);
    printf("\n");
    printf("the length is:%d\n",L.length);
}
void main(){
    SqList L,L1,L2;
    InitList(L1);
    Assign(L1);
    InitList(L2);
    Assign(L2);
    MergeList(L1,L2,L);
    ListTraver( L);
}
五、运行结果
Plea input the Number of the SqList:5
Plea input the elements:2 4 6 8 9
Plea input the Number of the SqList:8
Plea input the elements:1 3 5 12 34 36 41 46
1 2 3 4 5 6 8 9 12 34 36 41 46
the length is:13

本文发布于:2023-06-30 14:35:39,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1061683.html

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

标签:元素   线性表   要求   递减   值非   排列   问题   分配
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图