📄 4.cpp
字号:
#include<iostream> //定义头文件
using namespace std; //标准命名空间
//定义结构体
struct student
{
int nNum;
char cName[10];
struct student *pNext;
};
static struct student *ptemp = NULL; //定义静态指针为全局变量
//创建学生链表
struct student *creat(struct student *head)
{
struct student *p1,*p2;
int nNum;
char Name[10];
p2 = p1=(struct student *)malloc(sizeof(struct student )); //申请空间
scanf("%d",&nNum); //创建第一个节点
p1->nNum=nNum;
scanf("%s",Name);
strcpy(p1->cName,Name);
p1->pNext=NULL;
while(p1->nNum>0)
{
if(head==NULL)
head= p1;
else
{
scanf("%d",&nNum);
if (nNum==0)
break;
p1=(struct student *)malloc(sizeof(struct student ));
p1->nNum=nNum;
scanf("%s",Name);
strcpy(p1->cName,Name);
p2->pNext=p1;
p2=p1;
}
}
p2->pNext = NULL;
ptemp = head;
return head;
}
//在链表中查找
struct student *search(struct student *head,int num)
{
struct student *p1;
p1=head;
while (p1!=NULL)
{
if(p1->nNum==num)
{
cout<<" Name :"<<p1->cName<<endl; //输出学生的姓名
cout<<" Num :" << p1->nNum<<endl; //输出学生的学号
}
p1=p1->pNext;
}
return head;
}
//在链表中修改学生数据
struct student *repeat(struct student *head,int num)
{
struct student *p1;
int nNum,k=0;
char Name[10];
memset(Name,0,10);
p1=head;
while (p1!=NULL) //查找此人
{
if(p1->nNum==num)
{
cout<<" Name :"<<p1->cName<<endl;
cout<<" Num :" << p1->nNum<<endl;
k=1;
break;
}
p1=p1->pNext;
}
if(k)
{ //输入学生新的姓名学号
cout<<"New Name:"<<endl;
cout<<"New Num :" << endl;
scanf("%d",&nNum);
p1->nNum=nNum;
scanf("%s",Name);
strcpy(p1->cName,Name);
}
else
{
cout<<"No Reacord."<<endl; //记录中无此人
}
return head;
}
//在链表中插入节点
struct student *Insert(struct student *head,struct student *New,int num)
{
struct student *p2;
p2=head;
while(1)
{
if(p2 == NULL) //在表头插入
{
New->pNext = head;
head = New;
break;
}
if(p2->nNum == num) //在中间或者表尾插入
{
New->pNext = p2 ->pNext;
p2->pNext = New;
break;
}
p2 = p2->pNext;
}
return head;
}
//在链表中删除节点
struct student *Delete(struct student *head,int num)
{
struct student *p1,*p2=NULL;
p1 = head;
while(1)
{
if(p1->pNext == NULL) //删除头节点
{
cout << " No Found!"<<endl;
break;
}
if(head->nNum == num) //在中间删除
{
head = p1 ->pNext;
free(p1);
break;
}
p2 = p1;
p1 = p1 ->pNext;
if(p1->nNum == num) //在末尾删除
{
p2->pNext = p1 ->pNext;
free(p1);
break;
}
}
return head;
}
//输出链表
void putlink(struct student *head)
{
struct student *p=head;
do{
cout<<"Num:"<<p->nNum<<endl;
cout<<"Name:"<<p->cName<<endl;
p=p->pNext;
}while(p!=NULL);
}
//主函数
int main()
{
struct student *p = NULL; //声明一个结构体指针并赋值为NULL
char ch, name[10];
int num;
cout <<" 1. 建立 2. 查找"<<endl; //输出帮助信息
cout <<" 3. 修改 4. 插入"<<endl;
cout <<" 5. 删除 6. 输出 "<<endl;
cout <<" 0. 退出"<<endl;
struct student *head = NULL;
while(1==1)
{
ch = getchar(ch);
switch(ch)
{
case '1' : //输入1创建链表
creat(head);
break;
case '2' : //输入2查找
cout <<" 请输入查找的学号:"<<endl; //输入学号查找
scanf("%d",&num);
search(ptemp,num);
break;
case '3' : //输入3修改
cout <<" 请输入修改的学号:"<<endl; //输入修改的学号
scanf("%d",&num);
repeat(ptemp,num);
break;
case '4' : //输入4插入
cout <<" 请输入插入的学号,姓名 :"<<endl;//输入学号,姓名
scanf("%d",&num);
scanf("%s",name);
strcpy(p->cName,name);
Insert(ptemp,p,num);
break;
case '5' : //输入5删除
cout <<" 请输入删除的学号:"<<endl; //输入删除的学号
scanf("%d",&num);
Delete(ptemp,num);
break;
case '6' : //输出链表
putlink(ptemp);
break;
case '0' : exit(1);
}
}
return 0;
} //程序结束
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -