//带头结点的单链表,学习之用
#include<iostream>
#include<string>
usingnamespacestd;
structNode
...{
stringname;
intage;
Node*next;
};
typedefNode*LinkList;
LinkListinitList()//建立头结点
...{
LinkListh=newNode;
h->next=NULL;
returnh;
}
LinkListcreateListQueue(intn)//建立队列链表
...{
LinkListh,q,p;
h=initList();
q=h;
for(inti=0;i<n;i++)
...{
p=newNode;
cin>>p->name>>p->age;
q->next=p;
q=p;
}
q->next=NULL;
returnh;
}
voidprtList(LinkListh)//输出链表
...{
LinkListp;
p=h->next;
while(p!=NULL)
...{
cout<<p->name<<""<<p->age<<endl;
p=p->next;
}
}
LinkListcreateListStack(intn)//建立栈链表
...{
LinkListh,p,q;
h=initList();
q=h->next;
for(inti=0;i<n;i++)
...{
p=newNode;
cin>>p->name>>p->age;
h->next=p;
p->next=q;
q=p;
}
returnh;
}
boolemptyList(LinkListh)//判断链表空
...{
returnh==h->next;
}
LinkListsearchIndex(LinkListh,inti)//查找第i个结点
...{
intk=1;
LinkListp;
p=h->next;
while(k!=i&&p!=NULL)
...{
p=p->next;
k++;
}
if(k==i)
returnp;
else
returnNULL;
}
voidinsertList(LinkListh,Nodet,inti)//在第i个位置插入结点t
...{
LinkListp,q,s;
if(i==1||emptyList(h)==true)
...{
p=h;
}
else
...{
p=searchIndex(h,i-1);
if(p==NULL)return;
}
s=newNode;
*s=t;
q=p->next;
s->next=q;
p->next=s;
}
voiddeleteList(LinkListh,intn,inti)//删除第i个结点,n为结点总数
...{
LinkListp,q;
if(i<1||i>n||emptyList(h)==true)return;
if(i==1)
...{
p=h;
}
else
...{
p=searchIndex(h,i-1);
}
q=p->next;
p->next=q->next;
if(q!=NULL)deleteq;
}
voidreverseList(LinkListh)//逆置链表
...{
if(emptyList(h)==true)return;
LinkListp=h->next,q=p->next;
p->next=NULL;

while(q!=NULL)
...{
p=q->next;
q->next=h->next;
h->next=q;
q=p;
}
}
voidrun()
...{
intn;
cin>>n;
//假冒的链表逆置
LinkListh=createListStack(n);
prtList(h);
//真的链表逆置
/**//*LinkListh=createListQueue(n);
reverseList(h);
prtList(h);
*/
//链表的第k个位置插入一个结点
/**//*LinkListh=createListQueue(n);
prtList(h);
cout<<endl;
Nodet;
cin>>t.name>>t.age;
intk;
cin>>k;
insertList(h,t,k);
prtList(h);
*/
//链表中删除第k个结点
/**//*LinkListh=createListQueue(n);
prtList(h);
cout<<endl;
intk;
cin>>k;
deleteList(h,n,k);
prtList(h);*/
}
intmain()
...{
inttotal;
cin>>total;
for(intnow=1;now<=total;now++)run();
return0;
}

被折叠的 条评论
为什么被折叠?



