数据结构实验报告——线性表

简介: 数据结构实验报告——线性表

顺序表

#include<bits/stdc++.h>
using namespace std;
const int LISTSIZE=10;///顺序存储的最大元素数量
const int maxn=100;///每次分配的元素个数
#define ERROR -1
#define OK 1
int n,m;
typedef int ElemType;
struct List
{
    ElemType* elem;
    int len,listsize;
};
void output(List &L) ///遍历顺序表
{
    for(int i=0; i<L.len; i++)
    {
        cout<<L.elem[i];
        if(i==L.len-1) puts("");
        else cout<<" ";
    }
}
void initlist(List &L)
{
    L.elem=(ElemType*)malloc(LISTSIZE*sizeof(ElemType));
    if(!L.elem) exit(ERROR);///内存分配失败
    L.len=0;///当前存储的元素个数
    L.listsize=LISTSIZE;
}
int insertlist(List &L,int pos,ElemType e)
{
    if(pos<1||pos>L.len+1) return 0;///插入位置不合法
    if(L.len>=L.listsize) ///当前元素的个数大于最大个数 需要申请空间
    {
        ElemType* newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTSIZE)*sizeof(ElemType));
        if(!newbase) return ERROR;
        L.elem=newbase;
        L.listsize+=LISTSIZE;
    }
    ElemType *q=&(L.elem[pos-1]);
    ElemType *p=&(L.elem[L.len-1]);
    while(p>=q)
    {
        *(p+1)=*p;
        p--;
    }
    *q=e;
    L.len++;
    return 1;
}
string Find(List &L,ElemType e,int &pos)
{
    for(int i=0; i<L.len; i++)
        if(L.elem[i]==e)
        {
            pos=i;
            return "YES";
        }
    return "NO";
}
string Del(List &L,ElemType e)
{
    int pos;
    if(Find(L,e,pos)=="NO") return "Del Error!";
    cout<<L.len<<endl;
    ElemType *p=&(L.elem[pos]);
    ElemType *q=&(L.elem[L.len-2]);
    while(p<=q){
        *p=*(p+1);p++;
    }
    L.len--;
    return "Del Success!";
}
void Union(List &L1,List &L2,List &L){///递增合成递增的
    int i=L1.len-1,j=L2.len-1,t=0;
    while(i>=0&&j>=0){
        t++;
        if(L1.elem[i]>L2.elem[j]){
            insertlist(L,t,L1.elem[i]);
            i--;
        }
        else{
            insertlist(L,t,L2.elem[j]);
            j--;
        }
    }
    while(i>=0){
        t++;
        insertlist(L,t,L1.elem[i]);
        i--;
    }
    while(j>=0){
        t++;
        insertlist(L,t,L2.elem[j]);
        j--;
    }
}
int main()
{
    /*List L;
    initlist(L);
    int n;
    cin>>n;
    for(int i=1; i<=n; i++)
    {
        int x;
        cin>>x;
        insertlist(L,i,x);
    }
    output(L);
    for(int i=1; i<=2; i++)
    {
        cout<<"请输入您想要查找的元素"<<endl;
        int x,pos;
        cin>>x;
        if(Find(L,x,pos)=="YES")
        {
            printf("查找成功,您想要查找的元素位置为%d\n",pos);
        }
        else printf("查找失败!\n");
    }
     for(int i=1; i<=10; i++)
    {
        cout<<"请输入您想要删除的元素"<<endl;
        int x,pos;
        cin>>x;
        if(Del(L,x)=="Del Success!")
        {
            printf("删除成功,删除后的序列为\n");
            output(L);
        }
        else printf("删除失败!\n");
    }*/
    List L1,L2,L;
  ///初始化
    initlist(L1);
    initlist(L2);
    initlist(L);
  cout<<"请输入表A的元素个数:\n"<<endl;
    cin>>n;
  cout<<"请输入表A的元素:\n"<<endl;
    for(int i=1;i<=n;i++){
        int x;cin>>x;
        insertlist(L1,i,x);
    }
    cout<<"请输入表B的元素个数:\n"<<endl;
  cin>>m;
  cout<<"请输入表B的元素:\n"<<endl;
    for(int i=1;i<=m;i++){
        int x;cin>>x;
        insertlist(L2,i,x);
    }
    Union(L1,L2,L);
  cout<<"合并后的表C的元素为:\n"<<endl;
    output(L);
    return 0;
}

链表

#include<bits/stdc++.h>
using namespace std;
/*
(2)单链表的操作
① 输入一组整型元素序列,使用尾插法建立一个带有头结点的单链表。
② 实现该线性表的遍历。
③ 实现单链表的就地逆置。
④ 建立两个按值递增有序的单链表,将他们合并成一个按值递增有序的单链表。
要求利用原来的存储空间,并且新表中没有相同的元素。
*/
typedef int ElemType;
typedef struct LNode{
    ElemType data;
    struct LNode *next;
}Lnode,*LinkList;
void initlist(LinkList &L){///尾插法建立链表
    LinkList p,t;
    int x;cin>>x;
    L=t=(LinkList)malloc(sizeof(LNode));
    while(x){
        p=(LinkList)malloc(sizeof(LNode));
        p->data=x;
        t->next=p;
        t=p;
        cin>>x;
    }
    t->next=NULL;
}
void visit(LinkList p){///访问
     cout<<p->data<<" ";
}
void output(LinkList L){///遍历
    LinkList p=L->next;
    while(p!=NULL){
        visit(p);
        p=p->next;
    }
    puts("");
}
void Reverse(LinkList &L){
    LinkList p,q;
    p=L->next;L->next=NULL;
    while(p!=NULL){
        q=p->next;
        p->next=L->next;
        L->next=p;
        p=q;
    }
}
void Union(LinkList &La,LinkList Lb){
    LinkList pa,pb;
    pa=La->next,pb=Lb->next;
    free(Lb);
    LinkList last=La;
    while(pa&&pb){
        if(pa->data<pb->data){
            LinkList p=pa->next;
            pa->next=NULL;
            last->next=pa;
            last=last->next;
            pa=p;
        }
        else if(pa->data==pb->data){
            LinkList p=pa->next;
            pa->next=NULL;
            last->next=pa;
            last=last->next;
            pa=p;
            LinkList q=pb;
            pb=pb->next;
            free(q);
        }
        else{
            LinkList p=pb->next;
            pb->next=NULL;
            last->next=pb;
            last=last->next;
            pb=p;
        }
    }
    last->next=pa?pa:pb;
}
int main(){
    LinkList La;
    initlist(La);
    output(La);
  //  Reverse(La);
   // output(La);
    LinkList Lb;
    initlist(Lb);
    Union(La,Lb);
    output(La);
    return 0;
}
相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
4天前
|
存储 C语言
数据结构中的线性表链式存储介绍及其基本操作
链式存储是线性表的一种重要存储方式,它通过节点和指针的结构,实现了灵活的动态存储管理。本文介绍了单向链表的基本操作,并提供了相应的C语言代码示例。理解和掌握链表的操作对学习和应用数据结构具有重要意义。希望这篇博客能帮助你更好地理解线性表的链式存储。
15 2
|
8天前
|
存储 算法 数据挖掘
数据结构实验||约瑟夫环
数据结构实验||约瑟夫环
|
9天前
|
存储 算法 数据安全/隐私保护
【Python学习篇】Python实验小练习——高级数据结构(五)
【Python学习篇】Python实验小练习——高级数据结构(五)
25 1
|
10天前
|
算法
数据结构和算法学习记录——线性表之双向链表(上)-结点类型定义、初始化函数、创建新结点函数、尾插函数、打印函数、尾删函数
数据结构和算法学习记录——线性表之双向链表(上)-结点类型定义、初始化函数、创建新结点函数、尾插函数、打印函数、尾删函数
17 0
|
10天前
|
存储 算法
数据结构和算法学习记录——特殊线性表之队列-队列的概念、队列结构体类型定义 、基本接口函数、初始化函数、销毁队列函数、入队列函数、判断队列是否为空、出队列函数、读取队头队尾的数据 、计算队列数据个数
数据结构和算法学习记录——特殊线性表之队列-队列的概念、队列结构体类型定义 、基本接口函数、初始化函数、销毁队列函数、入队列函数、判断队列是否为空、出队列函数、读取队头队尾的数据 、计算队列数据个数
8 0
|
10天前
|
算法 C语言
数据结构和算法学习记录——特殊线性表之栈(下)-销毁栈函数、判断栈是否为空、压栈函数、出栈函数、取栈顶元素、计算栈中有多少个元素、栈有关习题-有效的括号
数据结构和算法学习记录——特殊线性表之栈(下)-销毁栈函数、判断栈是否为空、压栈函数、出栈函数、取栈顶元素、计算栈中有多少个元素、栈有关习题-有效的括号
10 0
|
10天前
|
算法
数据结构和算法学习记录——特殊线性表之栈(上)-栈的概念、栈的结构、链式栈数组栈、栈的结构体定义、栈的基本接口函数、栈顶初始化函数
数据结构和算法学习记录——特殊线性表之栈(上)-栈的概念、栈的结构、链式栈数组栈、栈的结构体定义、栈的基本接口函数、栈顶初始化函数
4 0
|
10天前
|
算法
数据结构和算法学习记录——线性表之双向链表(下)-头插函数、头删函数、查找函数、pos位置之前插入结点、pos位置删除结点及其复用、销毁链表函数
数据结构和算法学习记录——线性表之双向链表(下)-头插函数、头删函数、查找函数、pos位置之前插入结点、pos位置删除结点及其复用、销毁链表函数
9 0
|
10天前
|
算法
数据结构和算法学习记录——线性表之单链表(下)-头插函数、尾删函数、头删函数、查找函数、pos位置插入&删除数据、单链表销毁
数据结构和算法学习记录——线性表之单链表(下)-头插函数、尾删函数、头删函数、查找函数、pos位置插入&删除数据、单链表销毁
7 0
|
10天前
|
存储 算法
数据结构和算法学习记录——线性表之单链表(上)-初始单链表及其尾插函数(顺序表缺陷、单链表优点、链表打印)
数据结构和算法学习记录——线性表之单链表(上)-初始单链表及其尾插函数(顺序表缺陷、单链表优点、链表打印)
8 0