//file 链表的建立插入与删除.cpp
#include"iostream.h"
#include"string.h"
#include"stdlib.h"
struct listnode{ //链表结点的类型声明
int num;
char name[10];
char sex[4];
int age;
int score;
listnode* next;
};
listnode* head; //head指向表头结点
listnode* createlist() //带有空表头的链表的建立
{
listnode* temp,*tail; //tail指向当前链表的表尾结点
head=new listnode;//建立空表头
if(head==NULL){
cout<<"memory allocate fail and exit";
exit(1);
}
tail=head;
tail->next=NULL;
while(1){
temp=new listnode;
if(temp==NULL){
cout<<"memory allocate fail and exit";
exit(1);
}
cout<<"输入学生的信息(num,name,sex,age and score)(when num is -1 to stop!)/n";
cin>>temp->num;
if(temp->num==-1) break;
else
cin>>temp->name>>temp->sex>>temp->age>>temp->score;
tail->next=temp;//在当前表尾后插入新结点temp
tail=temp;
tail->next=NULL;
};
delete temp;
return head;
}
void browser(listnode* listhead)//”遍历“链表的各个结点
{
cout<<"/n各个学生的信息如下:/n";
listnode* temp=listhead->next;
while(temp!=NULL){
cout<<temp->num<<" "
<<temp->name<<" "
<<temp->sex<<" "
<<temp->age<<" "
<<temp->score<<endl;
temp=temp->next;
}
}
int lenoflist(listnode* head) //求链表head的结点个数
{
listnode* temp;
temp=head->next;
int lenofnode=0;
while(temp!=NULL){
lenofnode++;
temp=temp->next;
}
return lenofnode;
}
listnode* insert(listnode* head,int num)
//在链表head的第num个结点之后插入一个新结点
{
//判断num的正确性
if(num<0||num>lenoflist(head)){//when num=0,insert new node as the first node
cout<<"参数num错误!"<<endl;
return head;
}
listnode* position=head;
int counter=0;
for(int k=0;k<num;k++) //求第num个结点位置position
position=position->next;
//在位置temp之后插入新结点
cout<<"请输入要插入的学生的信息(num,name,sex,age and score):/n";
listnode* temp; //temp用来保存要插入的学生信息
temp=new listnode;
cin>>temp->num>>temp->name>>temp->sex>>temp->age>>temp->score;
//在position之后插入该结点
temp->next=position->next;
position->next=temp;
return head;
}
listnode* deletenode(listnode* head,int num)
//删除链表head中的第num个结点
{
//判断num的正确性
if(num<1||num>lenoflist(head)){
cout<<"参数num错误!"<<endl;
return head;
}
listnode* position=head;
for(int k=1;k<num;k++) //求第(num-1)个结点位置position
position=position->next;
//删除第num个结点
listnode* temp; //temp用来保存要被删除的结点
temp=position->next;
position->next=temp->next;
delete temp;
return head;
}
void main(void)
{
head=createlist();
cout<<"链表的长度为"<<lenoflist(head)<<endl;
browser(head); //可以browser(createlist());
cout<<"输入插入到第几个学生之后?";
int num;
cin>>num;
browser(insert(head,num));
cout<<"输入要删除第几个学生?";
cin>>num;
browser(deletenode(head,num));
}