学生信息管理系统之单链表实现

用C++实现学生信息管理系统,用到线性表的数据结构,用单链表实现。

首先看看什么是单链表,有什么特点:

   1.单链表每个节点存储其数据和指向下一个节点的指针,即数据域和指针域,两个逻辑上相邻的元素存储位置不一定相邻。节点定义如下:

typedef struct LNode{
    ElemType data;
    LNode *next;
}LNode;

    其中ElemType是学生基本信息的结构体,其定义如下:

typedef struct StuInfo{
    char stuID[10];
    char name[15];
    int age;
    char city[15];
    char tel[15];
}ElemType;
    2.单链表可以由头指针唯一确定,遍历单链表只能从头开始。

    3.每个元素都有唯一前驱和唯一后继,除头节点和尾节点。

    4.内存动态分配,当需要插入数据时申请一个相应的空间即可,元素个数不受限制较为灵活。

    5.基本操作:插入、删除、输出、修改、查找、排序等等。

由于是C++实现,基本操作全部封装在类的成员函数里面。
源码如下:

/*---------------------------------/
/Date:2016-09-14-------------------/
/Function:Using single-list to achieve the management of students/
/From:<>-----/
/Author:---------------------------/
/---------------------------------*/
#include 
#include 
#include 
#include 
using namespace std;
typedef struct StuInfo{
  char stuID[10];
  char name[15];
  int age;
  char city[15];
  char tel[15];
}ElemType;
typedef struct LNode{
  ElemType data;
  LNode *next;
}LNode;
class CLinkList{
private:
  LNode *head;
public:
  CLinkList();
  virtual ~CLinkList();
  bool IsListEmpty();
  void ClearList();
  void CreatList();
  int GetListLength();
  LNode* LocateElem(ElemType e);
  LNode* LocateElem(int pos);
  void InputStuInfo(ElemType &e);
  bool ListInsert(ElemType &e,int i);
  bool UpdateList(const ElemType &e,ElemType e1);
  LNode *GetElem(int pos);
  void OutputList();
  bool ListDelete(ElemType e,int pos);
};
//构造一个只有头节点的空链表
CLinkList::CLinkList(){
  head=new LNode;
  head->next=NULL;
}
//析构函数清空链表
CLinkList::~CLinkList(){
  LNode *p=head->next,*q;
  while(p){
    q=p->next;
    delete p;
    p=q;
  }
  delete head;
}
int CLinkList::GetListLength(){
  LNode *p;
  p=head->next;  //指针p指向头节点的后继节点
  int i=0;
  while(p){             //p不为空则计数器累加
    i++;
    p=p->next;
  }
  return i;
}
void CLinkList::OutputList(){
  LNode *p=head->next;
  if(p==NULL)  cout<<"没有信息!"<data.stuID<data.name<data.age<data.city<data.tel<next;
  }
}
bool CLinkList::IsListEmpty(){
  if(GetListLength()==0) return true;
  else 
    return false;
}
void CLinkList::ClearList(){
  LNode *p=head->next,*q;
  while(p){
    q=p->next;
    delete p;
    p=q;
  }
  head->next=NULL;  //得到带头节点的空链表
}
void CLinkList::CreatList(){
  LNode *s;
  ElemType e;
  bool judge;
  judge=IsListEmpty();
  if(judge==false)
    ClearList();
  cout<<"输入学号为!时结束!"<>e.stuID;
  while(strcmp(e.stuID,"!")){
    cout<<"输入学生姓名:";
    cin>>e.name;
    cout<<"输入学生年龄:";
    cin>>e.age;
    cout<<"输入学生源地:";
    cin>>e.city;
    cout<<"输入联系电话:";
    cin>>e.tel;
    cout<data=e;
    s->next=head->next;
    head->next=s;
    cout<<"输入学生学号:";
    cin>>e.stuID;
  }
  cout<<"链表建成"<data=e;
  p=head;
  while(jnext!=NULL){
    p=p->next;
    j++;
  }
  if(j==i){
    s->next=p->next;
    p->next=s;
    return true;
  }
  else
    return false;
}
bool CLinkList::ListDelete(ElemType e,int i){
  int j=1;
  LNode *p,*q;
  q=head;
  p=q->next;
  if(p==NULL)
    cout<<"\n此链表为空链表"<next!=NULL){
    q=p;
    p=p->next;
    j++;
  }
  if(p!=NULL){
    e=p->data;
    q->next=p->next;
    delete p;
    return true;
  }
  return false;
}
//按内容定位
LNode *CLinkList::LocateElem(ElemType e){
  LNode *p;
  p=head->next;
  while(p!=NULL && strcmp(p->data.stuID,e.stuID)!=0){
    p=p->next;
  }
  if(p==NULL){
    cout<<"\n该链表中不存在该元素"<GetListLength()){
    cout<<"单链表中不存在该元素"<next!=NULL){
    p=p->next;
    j++;
  }
  if(j==i)
    return p->next;
}
void CLinkList::InputStuInfo(ElemType &e){
  cout<<"输入学生学号:";
  cin>>e.stuID;
  cout<<"输入学生姓名:";
  cin>>e.name;
  cout<<"输入学生年龄:";
  cin>>e.age;
  cout<<"输入学生源地:";
  cin>>e.city;
  cout<<"输入联系电话:";
  cin>>e.tel;
  cout<next;
  while(p){
    if(strcmp(p->data.stuID,e.stuID)==0){
      p->data=e1;
      return true;
    }
    p=p->next;
  }
  return false;
}
LNode *CLinkList::GetElem(int pos){
  LNode *p;
  p=LocateElem(pos);
  if(p==NULL){
    return NULL;
  }
  else
    return p;
}
int Menu_Select();
void Menu_show();
void Menu_show(){
  cout<<"---------------------------------"<>selectNum;
    if(selectNum<1||selectNum>7)
      cout<<"输入有误,请重新输入!"<>i;
        cout<list.GetListLength()+1)
          cout<<"插入的位置不合法!"<>e.stuID;
        cout<>pos;
        cout<list.GetListLength())
          cout<<"删除位置不合法!"<>e.stuID;
        p=list.LocateElem(e);
        if(p!=NULL)
          cout<data.stuID<data.name<data.age<data.city<data.tel<



你可能感兴趣的:(数据结构,练手小项目,算法)