链表是一种很常见的数据结构,相对使用数组存放数据,使用链表更加节省空间,并且在任意位置删除,添加元素都是很快的
#include<cstdio>
#include<cstdlib>
#include<iostream>
using namespace std;
//创建一个结构体,表示链表的节点类型
struct Student{
char Name[20];
int Number;
struct Student* Next;//指向下一个结构体的指针
};
int count;//使用全局变量表示链表的长度
//创建链表
struct Student *Create(){
struct Student* Head=NULL;
struct Student* End,*New;
count=0;
End=New=(struct Student*)malloc(sizeof(struct Student));
cout<<"请输入姓名和学号"<<endl;
cin>>New->Name>>New->Number;
while(New->Number!=0){
count++;
if(count==1){//对链表进行判断,是否为第一个创建的节点
New->Next=Head;//将此节点设置为Head
End=New;
Head=New;
}else{
New->Next=NULL;//此节点的指向下一节点的指针为空,将上一个节点的指针指向这个节点
End->Next=New;
End=New;
}
New=(struct Student*)malloc(sizeof(struct Student));
cin>>New->Name>>New->Number;
}
free(New);
return Head;
}
//进行插入操作,在表头进行插入
struct Student* Insert(struct Student*Head){
struct Student* New;//创建临时节点,创建新的分配空间
New=(struct Student*)malloc(sizeof(struct Student));
cout<<"请输入姓名和学号"<<endl;
cin>>New->Name>>New->Number;
New->Next=Head;
Head=New;
count++;//节点数加1
return Head;
}
//进行删除操作
strucu Student* Delete(struct Student* Head,int index){
int i;
struct Student* Temp;//创建临时节点,
struct Student* Pre;//创建临时节点,
Temp=Head;
Pre=Temp;
cout<<"开始删除"<<endl;
for(i=1;i<index;i++){
Pre=Temp;
Temp=Temp->Next;
}
Pre->Next=Temp->Next;//Temp为需要删除的节点,将此节点的上一节点的指向下一节点的指针指向此节点的下一节点
free(Temp);
count--;
}
//打印操作
void Print(struct Student* Head){
struct Student* Temp;
Temp=Head;
cout<<"姓名 学号"<<endl;
while(Temp!=NULL){
cout<<Temp->Name<<" "<<Temp->Number<<endl;
Temp=Temp->Next;
}
}
int main(){
struct Student* Head;
Head=Create();
Head=Insert(Head);
Delete(Head,2);
Print(Head);
return 0;
}