《数据结构》必备基础知识(中)绪论及线性表(数据结构笔记2)

目录

前言

 绪论

课程内容

实验内容介绍

考核方式 

 历史可怜的通过率​

线性表

数据结构实验报告1:顺序表的相关操作



前言

正如GitHub大佬ucifer所言:

只有熟练掌握基础的数据结构与算法,才能对复杂问题迎刃有余

azl397985856/leetcode: LeetCode Solutions: A Record of My Problem Solving Journey.( leetcode题解,记录自己的leetcode解题之路。) (github.com)

 绪论

课程未来内容及线性表

实验内容介绍

考核方式 

 

 历史可怜的通过率

 关于绪论的具体内容我就不再赘述,感觉一些概念有点简单

线性表

 

 


数据结构实验报告1:顺序表的相关操作

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
typedef int ElemType;
typedef int Status;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
ElemType * newbase,*p,*q;
//顺序表的结构描述
typedef struct{
    ElemType *elem;
    int length;
    int listsize;
}SqList;
//顺序表的初始化
Status InitList_Sq(SqList &L){
    //构造一个空的线性表L
    L.elem = (ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
    if(!L.elem)exit(OVERFLOW); //存储分配失败
    L.length = 0;   //空表长度为0
    L.listsize = LIST_INIT_SIZE;    //初始存储容量
    return OK;
}//InitList_Sq
//顺序表的建立
void Creat_Sq(SqList &L){
    int i,n;
    cout<<"请输入顺序表的元素个数:";
    cin>>n;
    for(i=0;i<n;i++){
        cout<<"请输入第 "<<(i+1)<<" 个元素:";
        cin>>L.elem[i];
        L.length++;
    }
}
//顺序表的显示
void Show_Sq(SqList L){
    for(int i=0;i<L.length;i++){
        cout<<L.elem[i]<<" ";
    }
    cout<<endl;
}
//顺序表的插入
Status ListInsert_Sq(SqList &L,int i,ElemType e){
    if(i<1||i>L.length+1){
        cout<<"i值不合法"<<endl;
        return ERROR;
    }
    if(L.length>=L.listsize){
        newbase = (ElemType *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
        if(!newbase)exit(OVERFLOW);
        L.elem = newbase;
        L.listsize += LISTINCREMENT;
    }
    q = &(L.elem[i-1]);
    for(p = &(L.elem[L.length-1]);p>=q;--p){
        *(p+1) = *p;
    }
    *q = e;
    ++L.length;
    return OK;
}
//顺序表的删除
Status ListDel_Sq(SqList &L,int i,ElemType e){
    if(i<1||i>L.length+1){
        cout<<"i值不合法"<<endl;
        return ERROR;
    }
    q = &(L.elem[L.length-1]);
    for(p=&(L.elem[i-1]);p<=q;p++){
        *p=*(p+1);
    }
    e=*q;
    --L.length;
    return OK;
}
//顺序表的修改
Status ListUpdate_Sq(SqList &L,int i,ElemType e){
    if(i<1||i>L.length+1){
        cout<<"i值不合法"<<endl;
        return ERROR;
    }
    L.elem[i-1] = e;
    return OK;
}
int main()
{
    SqList L;
    InitList_Sq(L);
    Creat_Sq(L);
    Show_Sq(L);
    int num=0,i;
    ElemType e;
    bool flag = true;
    while(flag){
        cout<<"1.插入 "<<"2.删除 "<<"3.修改 "<<endl;
        cout<<"请输入要执行操作的序号:";
        cin>>num;
        if(num>=1&&num<=3){
            flag=false;
        }else{
            cout<<"输入非法"<<endl;
        }
    }
    switch(num){
        case 1 :{
            cout<<"请输入要插入的位置:";
            cin>>i;
            cout<<"请输入要插入的数:";
            cin>>e;
            ListInsert_Sq(L,i,e);
        }break;
        case 2 :{
            cout<<"请输入要删除的位置:";
            cin>>i;
            ListDel_Sq(L,i,e);
        }break;
        case 3 :{
            cout<<"请输入要修改的位置:";
            cin>>i;
            cout<<"请输入修改成的数:";
            cin>>e;
            ListUpdate_Sq(L,i,e);
        }break;
    }
    Show_Sq(L);
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FS9000

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值