基于C++线性表的简易信息管理,该如何处理

基于C++线性表的简易信息管理
本帖最后由 shinelovesmile 于 2014-10-28 12:16:00 编辑


#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;
}


一直写不对。基于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; 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;
}