链表的使用
来源:互联网 发布:stc15w4k32s4数据手册 编辑:程序博客网 时间:2024/05/16 05:59
//带头结点的单链表,学习之用
#include <iostream>
#include <string>
using namespace std;
struct Node
...{
string name;
int age;
Node* next;
};
typedef Node* LinkList;
LinkList initList()//建立头结点
...{
LinkList h=new Node;
h->next=NULL;
return h;
}
LinkList createListQueue(int n)//建立队列链表
...{
LinkList h,q,p;
h=initList();
q=h;
for(int i=0;i<n;i++)
...{
p=new Node;
cin >> p->name >> p->age;
q->next=p;
q=p;
}
q->next=NULL;
return h;
}
void prtList(LinkList h)//输出链表
...{
LinkList p;
p=h->next;
while(p!=NULL)
...{
cout << p->name << " " << p->age << endl;
p=p->next;
}
}
LinkList createListStack(int n)//建立栈链表
...{
LinkList h,p,q;
h=initList();
q=h->next;
for(int i=0;i<n;i++)
...{
p=new Node;
cin >> p->name >> p->age;
h->next =p;
p->next =q;
q=p;
}
return h;
}
bool emptyList(LinkList h)//判断链表空
...{
return h==h->next;
}
LinkList searchIndex(LinkList h, int i)//查找第i个结点
...{
int k=1;
LinkList p;
p=h->next;
while( k != i && p != NULL)
...{
p=p->next;
k++;
}
if (k==i)
return p;
else
return NULL;
}
void insertList(LinkList h, Node t, int i)//在第i个位置插入结点t
...{
LinkList p,q,s;
if (i==1 || emptyList(h)==true)
...{
p=h;
}
else
...{
p=searchIndex(h, i-1);
if (p==NULL) return;
}
s=new Node;
*s=t;
q=p->next;
s->next=q;
p->next=s;
}
void deleteList(LinkList h, int n, int i)//删除第i个结点,n为结点总数
...{
LinkList p,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) delete q;
}
void reverseList(LinkList h)//逆置链表
...{
if (emptyList(h)==true) return;
LinkList p=h->next, q=p->next;
p->next=NULL;
while(q != NULL)
...{
p=q->next;
q->next=h->next;
h->next=q;
q=p;
}
}
void run()
...{
int n;
cin>>n;
//假冒的链表逆置
LinkList h=createListStack(n);
prtList(h);
//真的链表逆置
/**//*LinkList h=createListQueue(n);
reverseList(h);
prtList(h);
*/
//链表的第k个位置插入一个结点
/**//*LinkList h=createListQueue(n);
prtList(h);
cout << endl;
Node t;
cin>>t.name>>t.age;
int k;
cin>>k;
insertList(h, t, k);
prtList(h);
*/
//链表中删除第k个结点
/**//*LinkList h=createListQueue(n);
prtList(h);
cout << endl;
int k;
cin>>k;
deleteList(h, n, k);
prtList(h);*/
}
int main()
...{
int total;
cin>>total;
for(int now=1; now<=total; now++) run();
return 0;
}
#include <iostream>
#include <string>
using namespace std;
struct Node
...{
string name;
int age;
Node* next;
};
typedef Node* LinkList;
LinkList initList()//建立头结点
...{
LinkList h=new Node;
h->next=NULL;
return h;
}
LinkList createListQueue(int n)//建立队列链表
...{
LinkList h,q,p;
h=initList();
q=h;
for(int i=0;i<n;i++)
...{
p=new Node;
cin >> p->name >> p->age;
q->next=p;
q=p;
}
q->next=NULL;
return h;
}
void prtList(LinkList h)//输出链表
...{
LinkList p;
p=h->next;
while(p!=NULL)
...{
cout << p->name << " " << p->age << endl;
p=p->next;
}
}
LinkList createListStack(int n)//建立栈链表
...{
LinkList h,p,q;
h=initList();
q=h->next;
for(int i=0;i<n;i++)
...{
p=new Node;
cin >> p->name >> p->age;
h->next =p;
p->next =q;
q=p;
}
return h;
}
bool emptyList(LinkList h)//判断链表空
...{
return h==h->next;
}
LinkList searchIndex(LinkList h, int i)//查找第i个结点
...{
int k=1;
LinkList p;
p=h->next;
while( k != i && p != NULL)
...{
p=p->next;
k++;
}
if (k==i)
return p;
else
return NULL;
}
void insertList(LinkList h, Node t, int i)//在第i个位置插入结点t
...{
LinkList p,q,s;
if (i==1 || emptyList(h)==true)
...{
p=h;
}
else
...{
p=searchIndex(h, i-1);
if (p==NULL) return;
}
s=new Node;
*s=t;
q=p->next;
s->next=q;
p->next=s;
}
void deleteList(LinkList h, int n, int i)//删除第i个结点,n为结点总数
...{
LinkList p,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) delete q;
}
void reverseList(LinkList h)//逆置链表
...{
if (emptyList(h)==true) return;
LinkList p=h->next, q=p->next;
p->next=NULL;
while(q != NULL)
...{
p=q->next;
q->next=h->next;
h->next=q;
q=p;
}
}
void run()
...{
int n;
cin>>n;
//假冒的链表逆置
LinkList h=createListStack(n);
prtList(h);
//真的链表逆置
/**//*LinkList h=createListQueue(n);
reverseList(h);
prtList(h);
*/
//链表的第k个位置插入一个结点
/**//*LinkList h=createListQueue(n);
prtList(h);
cout << endl;
Node t;
cin>>t.name>>t.age;
int k;
cin>>k;
insertList(h, t, k);
prtList(h);
*/
//链表中删除第k个结点
/**//*LinkList h=createListQueue(n);
prtList(h);
cout << endl;
int k;
cin>>k;
deleteList(h, n, k);
prtList(h);*/
}
int main()
...{
int total;
cin>>total;
for(int now=1; now<=total; now++) run();
return 0;
}
- 链表的使用
- 链表的使用
- 链表的使用
- 链表的使用
- 链表的使用
- 链表的使用
- 链表的综合使用
- 动态链表的使用。
- 邻接链表的使用
- 优雅的使用链表
- Redis链表的使用
- LinkedList链表的使用
- 链表的基本使用
- 链表的基本使用
- 【C++】链表的使用
- 静态链表的使用
- 使用链表的排序
- 企业级的使用链表
- 走私很有意思
- SAP常用术语表
- java初学碰到的两个问题:win xp下环境变量设置细节 和 变量的初始化问题
- C# 类的继承例子
- 两个排序算法比较
- 链表的使用
- 最新的关于BSP技术的深入剖析与详解3
- 网管员必知:常用电脑密码破解
- 3D游戏中的碰撞检测
- 利用VB 实现短消息收发
- netscape.javascript.JSObject,位置,及用,JSObject,访问,JavaScript
- ASP页面之间的表单值传递
- 找回忘记了的WindowsXP登录密码
- H.225和H.323协议