plsql调试存储过程无法将long类型值插入到临时表中_C++ 面向过程风格实现顺序表...

e45375f169be6e758240fcb66f9582ec.png

List.h文件

#include <iostream>
#define MaxSize 50                // 注意点:宏定义(#define)语句后面是不加分号的
using namespace std;              // 注意点:此语句后面需要加分号
typedef int ElemType;             // 注意点:typedef语句后面需要加分号
typedef struct{                   // 注意点:typedef和宏定义(#define)之间的区别
    ElemType data[MaxSize];       // 注意点:结构体的正确使用方法
    int length;
}SqList;
void InitList(SqList &L);
int Length(SqList L);
int LocateElem(SqList L, ElemType e);
ElemType GetElem(SqList L, int i);
bool ListInsert(SqList &L, int i, ElemType e);
ElemType ListDelete(SqList &L, int i);
void PrintList(SqList L);
bool IsEmpty(SqList L);

List.cpp文件

// 1.刻画一个顺序表(建立一个顺序表通用模板)
//要确定一个顺序表,就必须要指定这个顺序表存储的数组,线性表当前的长度,线性表的最大容量
//于是考虑用结构体来刻画顺序表
//在这个结构体中要包含的变量有:1.存储线性表数据元素的数组 2.顺序表当前长度(元素个数) 3.线性表的最大容量
// 数组存储空间的分配有两种方式 1.静态分配:数组的空间会事先固定好,一旦空间占满,则无法再加入新数据
//                            2.动态分配:数组的空间可以随着数据元素的增加而增加,用指针指向动态分配的数组
#include "List.h"
// 2. 对顺序表有哪些操作
// 2.1 对顺序表的初始化操作:将模板具体化,实实在在的表示一个确切的顺序表
void InitList(SqList &L)         // 声明一个reference:在类型名称和reference名称之间加上&符号
{
    L.length = 0;                // 刚开始,顺序表的元素个数为0
}

// 2.2 对顺序表求表的长度操作:这个操作将返回顺序表的元素个数
int Length(SqList L)
{
    return L.length;           // 注意点:return语句后面需要加分号
}

// 2.3 对顺序表进行按值查找操作:返回在顺序表中第一个元素值等于给定元素值的序号(数组下标值加1)
int LocateElem(SqList L, ElemType e)
{
    for(int i=0;i<L.length;i++)
    {
        if(L.data[i] == e)
        return i+1;
        
    }
    return 0;
}

// 2.4 对顺序表进行按位查找操作:返回顺序表中第i个位置(数组下标+1)的元素的值
ElemType GetElem(SqList L, int i)
{
    ElemType m = 0;
    if(0<i<=L.length)
    {
        m = L.data[i-1];
        return m;
    }
    else
    {
        cout << "顺序表位置违法n";       // 注意需要包含头文件和命名空间的说明
        return m;
    }   
}

// 2.5 对顺序表进行元素插入操作:在顺序表的第i个位置上插入指定的元素e
bool ListInsert(SqList &L, int i, ElemType e)
{
    if(L.length<MaxSize && 0<i<=L.length+1)
    {
        for(int m = L.length-1;m >= i-1; m--)
        {
            L.data[m+1] = L.data[m];
        }
        L.data[i-1] = e;
        L.length += 1;
        return true;
    }
    else
    {
        cout << "插入失败n";
        return false;
    }   
}

// 2.6 对顺序表中第i个位置的元素进行删除操作,并返回删除元素的值
ElemType ListDelete(SqList &L, int i)
{
    ElemType val = 0;
    if(0<i<L.length)
    {
        ElemType val = L.data[i-1];
        for(int m = i; m<L.length; m++)
        {
            L.data[m-1] = L.data[m];
        }
        L.length -= 1;
        return val;
    }
    else
    {
        cout<<"删除失败!n";
        return val;
    }
}

// 2.7 输出操作,按前后顺序输出线性表的所有元素值
void PrintList(SqList L)
{
    if(L.length>0)
    {
        for(int i = 0;i<L.length;i++)
        {
            cout << L.data[i] <<"n";
        }
    }
    else
    {
        cout << "输出失败!n";
    }   
}

// 2.8 判空操作,若L为空表,则返回true,否则返回false
bool IsEmpty(SqList L)
{
    if(L.length == 0)
    return true;
    else
    {
        return false;
    }  
}

ListMain.cpp文件

#include "List.h"
int main()
{
    SqList L;                              // 定义一个顺序表
    int val_init = 1;
    InitList(L);                           // 顺序表的初始化
    for(int i = 1; i<= 30; i++)
    {
        if(ListInsert(L, i ,val_init))     // 顺序表的插值操作
        val_init += 2;
    }
    int length = Length(L);                    // 求表长
    cout << "顺序表的长度为:"<<length<<"n";
    int num = 17;
    int count = LocateElem(L, num);            // 按值查找操作
    cout << "数值" << num << "在顺序表中的位置为:" << count << endl;
    int p = 10;
    ElemType elem = GetElem(L, p);             // 按位查找操作
    cout << "顺序表中第" << p << "个位置的数值为:" << elem << endl;
    int p_Insert = 15;
    ElemType val_insert = 100;
    if(ListInsert(L, p_Insert,val_insert))       // 插值操作
    {
        cout << "在第"<<p_Insert<<"个位置中插入"<< val_insert << "成功!"<<endl;
    }
    else
    {
        cout << "插入操作失败"<<endl;
    }
    int p_del = 21;
    ElemType val_del = ListDelete(L, p_del);     // 删除操作
    if(val_del)
    {
        cout << "删除顺序表中第"<<p_del<<"位置上的值成功!"<<endl;
    }
    else
    {
        cout<<"删除操作失败!"<<endl;
    }
    if(IsEmpty(L))                            // 判空操作
    {
        cout << "这个顺序表是空的!"<<endl;
    }
    else
    {
        cout << "这个顺序表非空!"<<endl;
    }
    cout << "顺序表中的所有元素为:"<<endl;
    PrintList(L);                           // 打印操作
}

VsCode平台要用到的编译调试配置文件launch.json和tasks.json

launch.json文件

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) 启动",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}${workspaceFolderBasename}.exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "C:/MinGW/bin/gdb.exe",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "C/C++: g++.exe build active file"
        }
    ]
}

tasks.json文件

{
	"version": "2.0.0",
	"tasks": [
		{
			"type": "shell",
			"label": "C/C++: g++.exe build active file",
			"command": "C:MinGWbing++.exe",
			"args":["${workspaceFolder}*.cpp", "-o", "${workspaceFolder}${workspaceFolderBasename}.exe","-g"],
			"options": {
				"cwd": "${workspaceFolder}"
			},
			"problemMatcher": [
				"$gcc"
			],
			"group": {
				"kind": "build",
				"isDefault": true
			}
		}
	]
}

调试运行结果

2ba52c9e865785fd4ad92412909bfca1.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值