数据结构 顺序表学习

今天借了同学的一本严蔚敏老师编写的《数据结构》,这也是广为人知的经典教材。对于初学者容易上手。

上午一直在看机器视觉相关的文献,所以就利用下午和晚上的时间把线性表中的 顺序表看了一遍,把相关程序跑了一下,这几天再把与链表相关的掌握一下,刚开始还是很简单的,后面的红黑树,图章节可能要费点时间了,毕竟学过好久了,很多概念,算法已经模糊了。希望这个暑假能坚持下来吧,希望能一直更新下去,有所收获。

源码:https://download.csdn.net/download/tianyuhang8800/11247543

下面是有关顺序表的代码:

#include "stdio.h"
#include "windows.h"
#include "string.h"

typedef int ElemType;
typedef int Status;//0-成功 1-失败
#define MAXSIZE 100

typedef struct
{
    ElemType *elem; //储存空间的基地址
    int length; //当前个数

}SqList;//定义类型为SqList
//初始化
Status InitList(SqList &L)
{
    L.elem = new ElemType[MAXSIZE];//ElemType
    if (!L.elem)
        exit(0);
    L.length = 0;
    return 1;

}
//创建线性表
void CreateList(SqList &L)
{
    printf("输入线性表元素的个数\r\n");
    scanf_s("%d",&L.length);
    printf("请输入线性表\r\n");
    for (int j = 0; j < L.length; j++)
    {
        scanf_s("%d", &L.elem[j]);
    }
}

//按照位置查找元素
void  LocateElem_Data(SqList L)
{
    int i;
    printf("请输入要查找元素的位置\r\n");
    scanf_s("%d", &i);
    printf("该位置的元素为:%d\r\n", L.elem[i-1]);
}
//按照元素查找位置
void LocateElem_Addr(SqList L)
{
    int e,i=0;
    printf("请输入元素:\r\n");
    scanf_s("%d", &e);
    for (i = 0; i < L.length; i++)
    {
        if (L.elem[i] == e)
        {
            printf("该元素位于第:%d号\r\n", i + 1);
            break;
        }
    }
    if (i == L.length)
    {
        printf("无此元素\r\n");
    }
}
//插入
 void ListInsert(SqList &L)//在第i个位置 插入e
{
    int i  = 0,e = 0;
    while (1)
    {
        printf("请输入要插入的位置\r\n");
        scanf_s("%d", &i);
        if (i<1 || i>L.length+1)// +1 修复了无法在结尾处插入元素的Bug

            printf("输入有误,请重新输入\r\n");
        else
        {
            printf("请输入要插入值:\r\n");
            scanf_s("%d", &e);
            break;
        }
    }
    for (int j = L.length ; j >= i; j--)
    {
        L.elem[j ] = L.elem[j-1];
    }
    L.elem[i- 1] = e;
    L.length = L.length++;
    printf("插入成功\r\n");
}
// 删除元素
void  ListDelete(SqList &L)//在第i个位置 删除元素
{
    int i = 0;
    while (1)
    {
        printf("请输入要删除的位置\r\n");
        scanf_s("%d",&i);
        if (i<1 || i>L.length)
        {
            printf("输入错误,请重新输入\r\n");
        }
        else
        {
            for (int j = i; j < L.length; j++)
            {
                L.elem[j - 1] = L.elem[j];
            }
            L.length = L.length--;
            break;
        }
    }
    printf("删除成功\r\n");
}

//查看线性表
void Print(SqList & L)
{
    printf("线性表如下:\r\n");
    for (int j = 0; j <L.length;j++)
    {
        //printf("L=%d", L.length);
        //while (1);
        printf("%d\t", L.elem[j]);
    }
    printf("\r\n");
}
void InitMenu()
{
    printf("------菜单------\r\n");
    printf("1.创建线性表\r\n");
    printf("2.查看线性表\r\n");
    printf("3.插入节点\r\n");
    printf("4.删除节点\r\n");
    printf("5.按位置查找元素\r\n");
    printf("6.按元素查找位置\r\n");
    printf("0.退出\r\n");
}
int  main()
{
    int i = 0;
    SqList L;
    InitList(L);
    InitMenu();
    while (scanf_s("%d", &i))
    {
        switch (i)
        {
            case 1:CreateList(L); InitMenu(); break;//创建线性表
            case 2:Print(L); InitMenu(); break;//打印
            case 3:ListInsert(L); InitMenu(); break;//插入节点
            case 4:ListDelete(L); InitMenu(); break; //删除节点
            case 5:LocateElem_Data(L); InitMenu(); break;//按位置查找元素
            case 6:LocateElem_Addr(L); InitMenu(); break;//按元素查找位置
            default: return 0;  break;// 关闭窗口
        }
    }

创建线性表并显示
}

插入节点


删除节点

查找元素

查找位置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值