基于C++线性表的简易信息管理,该如何处理
基于C++线性表的简易信息管理
一直写不对。

大神求教
主要是删除插入输出的问题
------解决思路----------------------
首先你这个编译能通过?那个Insert函数不报错?还有你的逻辑总感觉怪怪的,还有字符数组怎么赋值的?我就将就着改了一下,你自己好好整理吧
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include <string>
using namespace std;
typedef char EType;
typedef int Status;
#define MaxListSize 5
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
typedef struct Student
{
Status num; //学号
EType name[10];//姓名
};
//struct Student stu[5];
typedef struct
{
Student *element;
int length ;
int MaxSize ;
}LinearList;
LinearList L;
void Creat(LinearList &L, int MaxSize1)
{// 构造一个最大容量为MaxListSize 的线性表L
L.MaxSize = MaxSize1;
L.element = new Student[L.MaxSize];
L.length = MaxListSize;
for (int i = 0; i < L.length; i++)
{
cout << "请输入学号";
cin >> L.element[i].num;
cout << "请输入姓名";
cin >> L.element[i].name;
}
}
void Output(LinearList &L)
{// 逐个地输出线性表L中的数据元素
for (int i = 0; i < L.length; i++)
// cout << L.element[i] << " ";
cout<<L.element[i].num<<" "
<<L.element[i].name
<<endl;
}
Status Insert(LinearList &L, int k,Status &x, EType &y)
{// 在线性表L中第k个数据元素之后中插入元素x运算
// 如果不存在第k个元素或线性表空间已满,则返回出错状态码
if (k < 0 || k > L.length || L.length == L.MaxSize)
return ERROR;
for (int i = L.length - 1; i >= k; i--)
L.element[i + 1].num = L.element[i].num;//向后移动一位
L.element[i + 1].name[10] = L.element[i].name[10];//向后移动一位
L.element[k].num = x;
L.element[k].name[10] = y;
L.length++; //插入后表长度加一
return OK;
}
Status Delete(LinearList &L, int k)
{// 在线性表L中删除第k个数据元素, 如果不存在第k个元素返回出错状态码
if (k < 1 || k > L.length)
return ERROR;
for (int i = k; i < L.length; i++)
{
L.element[i - 1].num = L.element[i].num; //向前移动一位
L.element[i-1].name[10]=L.element[i].name[10];
// L.name[i - 1] = L.name[i];
L.length--;//修改表的长度
}
return OK;
}
int main()
{
LinearList L;
// int i;
int MaxSize = 5;
Creat(L, 5); //构造空线性表
Delete(L, 1);
//删除
int x=8888;
EType y=3;
Insert(L,1,x,y);
Output(L); //打印顺序表
system("PAUSE"); //便于看结果,不在题目的要求之内
return 0;
}
一直写不对。
大神求教
主要是删除插入输出的问题
------解决思路----------------------
首先你这个编译能通过?那个Insert函数不报错?还有你的逻辑总感觉怪怪的,还有字符数组怎么赋值的?我就将就着改了一下,你自己好好整理吧
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include <string>
using namespace std;
typedef char EType;
typedef int Status;
#define MaxListSize 5
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
typedef struct Student
{
Status num; //学号
EType name[10];//姓名
};
//struct Student stu[5];
typedef struct
{
Student *element;
int length ;
int MaxSize ;
}LinearList;
LinearList L;
void Creat(LinearList &L, int MaxSize1)
{// 构造一个最大容量为MaxListSize 的线性表L
L.MaxSize = MaxSize1;
L.element = new Student[L.MaxSize];
L.length = MaxListSize;
for (int i = 0; i < L.length; i++)
{
cout << "请输入学号";
cin >> L.element[i].num;
cout << "请输入姓名";
cin >> L.element[i].name;
}
}
void Output(LinearList &L)
{// 逐个地输出线性表L中的数据元素
for (int i = 0; i < L.length; i++)
// cout << L.element[i] << " ";
cout<<L.element[i].num<<" "
<<L.element[i].name
<<endl;
}
Status Insert(LinearList &L, int k,Status &x, EType* y)
{// 在线性表L中第k个数据元素之后中插入元素x运算
// 如果不存在第k个元素或线性表空间已满,则返回出错状态码
if (k < 0
------解决思路----------------------
k > L.length
------解决思路----------------------
L.length == L.MaxSize)
return ERROR;
for (int i = L.length; i >= k; i--) //---------注意数组的赋值 和循环的逻辑
{
L.element[i].num = L.element[i-1].num;//向后移动一位
strcpy(L.element[i].name, L.element[i-1].name);//向后移动一位
}
L.element[k].num = x;
strcpy(L.element[k].name, y);
L.length++; //插入后表长度加一
return OK;
}
Status Delete(LinearList &L, int k)
{// 在线性表L中删除第k个数据元素, 如果不存在第k个元素返回出错状态码
if (k < 1
------解决思路----------------------
k > L.length)
return ERROR;
for (int i = k; i < L.length; i++) //---------注意数组的赋值 和循环的逻辑
{
L.element[i].num = L.element[i+1].num; //向前移动一位
strcpy (L.element[i].name,L.element[i+1].name);
// L.name[i - 1] = L.name[i];
}
L.length--;//修改表的长度
return OK;
}
int main()
{
LinearList L;
// int i;
int MaxSize = 60; //??????
Creat(L, 10); //构造空线性表
Output(L); //打印顺序表
cout << endl << endl;
Delete(L, 1);
//删除
int x=8888;
EType *y="wo"; //!!!!!!!!!
Insert(L,1,x,y);
cout << "Length" << L.length << endl;
Output(L); //打印顺序表
system("PAUSE"); //便于看结果,不在题目的要求之内
return 0;
}