#include<iostream>
#include<string.h>
using namespace std;
typedef struct studnent{
char sno[10];
char name[10];
char phone[11];
char classs[20];
int age;
}ElemType;
typedef struct Lnode{
ElemType student;
struct Lnode *next;
}LNode,*LinkList;
//初始化
void InitList(LinkList &L){
L=new LNode;
L->next=NULL;
cout<<"初始化成功!"<<endl;
cout<<"*************************************"<<endl;
}
//创建联系人
void CreateStudnet(LinkList &L,int n){
LinkList p;
while(n){
p=new LNode;
cin>>p->student.sno>>p->student.name>>p->student.phone>>p->student.classs>>p->student.age;
p->next=L->next;
L->next=p;
n--;
}
}
//打印
void printStudent(LinkList L){
LinkList p;
p=L->next;
cout<<"*************************************"<<endl;
cout<<"编号"<<"\t"<<"姓名"<<"\t"<<"手机号"<<"\t"<<"班级"<<"\t"<<"年龄"<<"\t"<<endl;
while(p){
cout<<p->student.sno<<"\t"<<p->student.name<<"\t"<<p->student.phone<<"\t"<<p->student.classs<<"\t"<<p->student.age<<endl;
p=p->next;
}
}
//取值
void GetElem(LinkList L,int i){
LinkList p;
p=L->next;
int j=1;
while(p&&j<i){
p=p->next;
j++;
}
if(!p||j>i) cout<<"取值失败!"<<endl;
cout<<"*************************************"<<endl;
cout<<"位置为"<<i<<"的联系人信息为:"<<endl;
cout<<p->student.sno<<"\t"<<p->student.name<<"\t"<<p->student.phone<<"\t"<<p->student.classs<<"\t"<<p->student.age<<endl;
}
//跟据学生编号查找查找
void LocateElem(LinkList L,char sno[]){
LinkList p;
int j;
p=L->next;
j=1;
while(p&&strcmp(p->student.sno,sno)!=0){
p=p->next;
j++;
}
if(p) cout<<"编号为"<<sno<<"的学生所在位置为第"<<j<<"位"<<endl;
else cout<<"没有该编号的学生"<<endl;
cout<<"*************************************"<<endl;
}
//插入
void ListInsert(LinkList &L,int i){
LinkList p;
int j;
p=L;j=0;
while(p&&j<i-1){
p=p->next;
j++;
}
if(!p||j>i-1) cout<<"插入的位置不正确"<<endl;
LinkList s=new LNode;
cout<<"请输入编号:"<<endl;
cin>>s->student.sno;
cout<<"请输入姓名:"<<endl;
cin>>s->student.name;
cout<<"请输入手机号:"<<endl;
cin>>s->student.phone;
cout<<"请输入班级:"<<endl;
cin>>s->student.classs;
cout<<"请输入年龄:"<<endl;
cin>>s->student.age;
s->next=p->next;
p->next=s;
cout<<"插入成功!"<<endl;
cout<<"*************************************"<<endl;
}
//删除
void ListDelete(LinkList &L,int i){
LinkList p;
int j;
p=L;j=0;
while(p->next&&j<i-1){
p=p->next;
j++;
}
if(!(p->next)||j>i-1) cout<<"删除位置不合理!"<<endl;
LinkList q;
q=p->next;
p->next=q->next;
delete q;
cout<<"删除成功!"<<endl;
cout<<"*************************************"<<endl;
}
int main(){
LinkList L;
//初始化
InitList(L);
int i;
int end=1;
int num;
while(end){
cout<<"请输入你要选择的操作:"<<endl;
cout<<"1-------输入n个基本联系人信息"<<endl;
cout<<"2-------输出通讯录列表"<<endl;
cout<<"3-------取值"<<endl;
cout<<"4-------跟据学生编号查找"<<endl;
cout<<"5-------插入"<<endl;
cout<<"6-------删除"<<endl;
cout<<"0-------退出操作"<<endl;
cin>>num;
cout<<"*************************************"<<endl;
switch(num){
case 1:
//输入联系人
cout<<"请输入n个联系人信息!"<<endl;
cin>>i;
CreateStudnet(L,i);break;
case 2:printStudent(L);break;
case 3:
cout<<"请输入你要查找的位置!"<<endl;
cin>>i;
GetElem(L,i);
break;
case 4:
char sno[10];
cout<<"输入你要查找的学生编号:"<<endl;
scanf("%s",sno);
LocateElem(L,sno);break;
case 5:
cout<<"请输入你要插入的位置:"<<endl;
cin>>i;
ListInsert(L,i);break;
case 6:
cout<<"请输入你要删除的位置:"<<endl;
cin>>i;
ListDelete(L,i);
break;
case 0:end=0;cout<<"您已停止操作!"<<endl;break;
}
}
return 0;
}
C++语言实现通讯录--链表
最新推荐文章于 2024-09-14 17:18:21 发布
本文介绍了如何使用C++实现一个简单的链表数据结构,包括初始化链表、添加学生信息、打印链表、取值、根据学生编号查找以及插入和删除操作。
摘要由CSDN通过智能技术生成