主题:速求 望哪位大侠帮菜鸟小弟一下
awdsbo
[专家分:0] 发布于 2008-12-23 14:01:00
链表的基本操作
利用头插法建立一个带头结点单链表,并能用算法实现该单链表的插入、删除、查找、求某个元素的前驱和后继、把此单链表逆置、从小到大排序,同时要求在屏幕上显示每次操作的结果,当所有操作完成后能撤消该单链表。
回复列表 (共2个回复)
沙发
cantalou [专家分:40] 发布于 2009-01-13 12:47:00
内容 还真多啊
板凳
yaoxi365 [专家分:0] 发布于 2009-01-15 00:01:00
#include <iostream.h>
#include <malloc.h>
typedef struct node
{
char info;
node *link;
}*pnode,*linklist;
int initial(linklist &L)//创建空链表
{
L=(linklist)malloc(sizeof(node));
if(!L)
{
cout<<"out of space!\n";
return 0;
}
L->link=NULL;
return 1;
}
void brow(linklist &L)//浏览表的元素
{
pnode p;
p=L->link;
while(p!=NULL)
{
cout<<p->info;
p=p->link;
}
}
void append(linklist &L,char x)//负责初始化线性表
{
pnode p,q,n;
p=L;
q=L->link;
while(q!=NULL)
{
p=q;
q=q->link;
}
n=(linklist)malloc(sizeof(node));
n->info=x;
p->link=n;
n->link=NULL;
}
pnode loc(linklist L,char x)//在单链表中求某元素的存储位置
{
pnode p;
if(L==NULL)
return NULL;
p=L->link;
while(p!=NULL&&p->info!=x)
p=p->link;
return p;
}
int insertpost(linklist &L,pnode p,char x)//单链表的插入
{
pnode q;
q=(pnode)malloc(sizeof(node));
if(q==NULL)
{
cout<<"out of space!\n";
return 0;
}
else
{
q->info=x;
q->link=p->link;
p->link=q;
return 1;
}
}
int delet(linklist &L,char x)//单链表的删除
{
pnode p,q;
p=L;
if(p==NULL)
return 0;
while(p->link!=NULL&&p->link->info!=x)
p=p->link;
if(p->link==NULL)
{
cout<<"not exist!\n";
return 0;
}
else
{
q=p->link;
p->link=q->link;
free(q);
return 1;
}
}
int Length(linklist &L)//求表长
{
int i=0;
pnode p;
p=L->link;
while(p!=NULL)
{
i++;
p=p->link;
}
return i;
}
void main()
{
linklist L;
cout<<"创建空链表(1代表创建成功,0代表创建失败):";
cout<<initial(L)<<endl<<"原来的链表:";
append(L,'a');
append(L,'b');
append(L,'c');
brow(L);
cout<<endl<<"链表的长度:"<<Length(L)<<endl;
delet(L,'c');
cout<<"删除后的表:";
brow(L);
cout<<endl;
}
/**************************************
输入与运行结果:
创建空链表(1代表创建成功,0代表创建失败):1
原来的链表:abc
链表的长度:3
删除后的表:ab
****************************************/
仅供参考
我来回复