stu_msg* head=NULL;//链表头初始化
static int stucnt=0;
stu_msg* stulink_insert(stu_msg* node){
stu_msg* new_node=node;//
stucnt++;//学生数
if(NULL==head){//链表还没有节点
head=new_node;//链表头
head->next=NULL;
head->prev=NULL;
}else{
//一种方式是:插入到链表尾;一种是:插入到链表头
stu_msg* p=head->next;
stu_msg* q=head;//从头节点开始
while(NULL!=p){//直到找到末尾节点
q=p;
p=p->next;
}
q->next=new_node;
new_node->prev=q;
new_node->next=NULL;
//从链表头插入
//head=new_node;//更新头节点
//head->next=q;
//head->num=stucnt;
}
return new_node;
}
stu_msg* stunode_create(char name[],char sex[],char phone[],char number[]){
stu_msg* node=new stu_msg;//分配内存
if(NULL==node)
return NULL;
node->name=new char[strlen(name)+1];
if(NULL==node->name)
return NULL;
strcpy(node->name,name);//node->name=name;
node->sex=new char[strlen(sex)+1];
if(NULL==node->sex)
return NULL;
strcpy(node->sex,sex);//node->sex=sex;
node->phone=new char[strlen(phone)+1];
if(NULL==node->phone)
return NULL;
strcpy(node->phone,phone);//node->phone=phone;
node->number=new char[strlen(number)+1];
if(NULL==node->number)
return NULL;
strcpy(node->number,number);//node->number=number;
node->next=NULL;node->prev=NULL;//指针初始化
return node;
}
void stunode_delete(stu_msg* node){//删除节点
if(NULL==head)
return ;
if(NULL==node)
return ;//删除失败,找不到对应节点
if(head==node){//删除的是头节点
head=NULL;
}else if(NULL==node->next){//删除的是尾节点
stu_msg* p=node->prev;
p->next=NULL;
}else{//是中间节点
stu_msg* p=node->prev;
stu_msg* q=node->next;
p->next=q;
q->prev=p;
}
stucnt--;
//节点删掉后释放内存
delete []node->name;
delete []node->sex;
delete []node->phone;
delete []node->number;
delete node;
}
//头文件定义
struct stu_msg{
char *name,*sex,*phone,*number;
stu_msg *prev;
stu_msg *next;
};
stu_msg* stulink_insert(stu_msg* node){
stu_msg* new_node=node;//
stucnt++;//计数
if(NULL==head){//链表还没有节点
head=new_node;//链表头
head->next=NULL;
head->prev=NULL;
}else{
//一种方式是:插入到链表尾;一种是:插入到链表头
stu_msg* q=head;//从头节点开始
head=new_node;//更新头节点
head->next=q;
q->prev=head;
}
return new_node;
}
这个程序有点粗糙简单,适合入门作参考。