链表的使用

//带头结点的单链表,学习之用
#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;
}

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭