单链表的创建、销毁与K结点处插入新结点
#include <iostream>
#include <string>
#include <iomanip>
using namespace std;
//**单链表定义**
typedef struct LNode{
char name[20];
char sex[10];
int age;
struct LNode *next;
}LNode,*LinkList;
//**单链表的初始化**
void InitList(LinkList *list){
(*list)=(LinkList)malloc(sizeof(LNode));
(*list)->next=NULL;
}
//**链表K结点处插入新结点**
void ListInsert(LinkList list,char name1[],char sex1[],int age1,int j){
if(!list)
return;
if(j>((list)->age)){
cerr<<"插入点不在链表中!"<<endl;
return;
}
LinkList p,s;
p=list;
s=(LinkList)malloc(sizeof(LNode));
s->age=age1;
strcpy_s(s->name,name1);
strcpy_s(s->sex,sex1);
for(int i=1;i<j;++i)
p=p->next;
s->next=p->next;
p->next=s;
}
// **遍历链表**
void Display(LinkList list){
LinkList p;
p=list->next;
cout<<"姓名"<<"\t"<<"性别"<<"\t"<<"年龄"<<endl;
while(p){
cout<< (p->name) <<"\t"<< (p->sex)
<<"\t"<< (p->age) <<endl;
p=p->next;
}
}
//**链表的销毁**
void Dispose(LinkList students)
{//使用了头结点
LinkList temp,prev;
prev=students->next;
students->next=NULL;
while(prev){
temp=prev->next;//销毁的是空间,指针还在应该置空
free(prev);
prev=temp;
}
}
//**主函数main**
int main(){
int location;
LinkList students;
InitList(&students);
cout<<"Add the students? (Y/N): ";
char ch;
cin>>ch;
while(ch=='Y'){
cout<<setw(8)<<"name: ";
cin>>students->name;
cout<<setw(8)<<"sex: ";
cin>>students->sex;
cout<<setw(8)<<"age: ";
cin>>students->age;
cout<<setw(8)<<"location: ";
cin>>location;
ListInsert(students,students->name,students->sex,students->age,location);
cout<<"Continue to add the students? (Y/N): ";
cin>>ch;
}
Display(students);
//销毁链表所占的资源
Dispose(students);
cout<<endl;
}