#include <afxcmn.h>
#include <afxcoll.h>
#include <iostream.h>
#include <afx.h>
//编译时需要使用多线程的版本的运行库
CStringList strList;
void print()
{
//获得节点的数量
int nCount=strList.GetCount();
cout<<nCount<<"nodes"<<endl;
//遍历链表的一种方法
for(int i=0;i<nCount;i++)
{
//根据序号(从头开始)获得节点的位置
POSITION pos=strList.FindIndex(i);
if(pos)
{
//根据位置取得节点的内容
CString str=strList.GetAt(pos);
cout<<(LPCSTR)str<<" ";
}
}
cout<<endl;
}
int main()
{
//判断链表是否为空
if(!strList.IsEmpty())
{
return 0;
}
for(int i=0;i<10;i++)
{
CString str;
str.Format(_T("%d"),i);
if(i%2==0)
{
//在链表头部添加节点
strList.AddHead(str);
}
else
{
strList.AddTail(str);
}
}
//打印链表
print();
//获得链表头节点的位置
POSITION pos=strList.GetHeadPosition();
//设置指定节点位置的内容
strList.SetAt(pos,"A");
print();
//删除头尾节点
strList.RemoveHead();
strList.RemoveTail();
print();
//在指定位置之前插入节点
pos=strList.GetTailPosition();
strList.InsertBefore(pos,"B");
//在指定节点位置之后插入节点
pos=strList.GetHeadPosition();
strList.InsertAfter(pos,"A");
print();
//查找指定的节点,如果没有找到则返回空
pos=strList.Find("0");
//删除指定节点
if(pos)
{
strList.RemoveAt(pos);
}
print();
CStringList strList2;
strList2.AddHead("#");
//在头部与其他链表合并
strList.AddHead(&strList2);
//在尾部与其他链表合并
strList.AddTail(&strList2);
print();
//清空所有节点
strList.RemoveAll();
return 0;
}