没什么大的毛病
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
typedef int ElemType
typedef struct LNode {
ElemType date
struct LNode *next
}linklist,*link
/*构造链表*//////////////////////////////////////
void IinitList(link &L)
{
if(L)delete L
L= (link)malloc(sizeof(LNode))
if (!L) exit(1)
L->next=NULL
cout<<"链表已经建立\n"
}
//////////////////////////////////////////////////////
// /*删除结点*/// //////////////////////////////////////////////
int listdelete(link &L,int i,ElemType &e)
{
link p,qint j
p=Lj=0
while(p->next&&j<i-1)
{
p=p->next++j
}
q=p->next
p->next=q->next
e=q->datefree(q)
cout<<"链表已经删除\n"
return 1
}
////////////////////////////////////////////// /////////
// /*插入结点*/////////////// ///////////////////////
int listinsert(link &L,int i,ElemType e)
{
link p,q
int j
p=Lj=0
while(p&&j<i-1)
{
p=p->next++j
}
q= (link)malloc(sizeof(LNode))
q->date=e
q->next=p->next
p->next=qcout<<"链表已经插入\n"
return 1
}
/////////////////////////////////////////////////////
////*显示数据*///////// ////////////////////////////////
void show(link l)
{ link pint j
p=lj=0
cout<<"链表的值为:\n"
while(p->next)
{
cout<<p->next->date<<endl
p=p->next
}
}
//////////////////////// /////////////////////////////////
//////销毁链表////// ////////////////////////////////////////
void destorylinst(link &L)
{
while(L)
{ link p=L
L=L->next
free(p)
}
L=NULL
}
////// 打印表头///////////////////////////////////////
void print()
{
cout<<"------------------------\n"
cout<<"------------------------\n"
}
////////////////////////////////////////////////////////
///////////////////////////////////////////////////////
////查找结点//// ////////////////////////////////////////
void lookfor(link l,int e)
{
if(l==NULL)
cout<<"链表未建立,请先构造链表\n"
else{
link pint i=0,j=0
p=l->next
cout<<"你查找值的位置是:\n "
while(p)
{ if(p->date==e)
{ j++
cout<<i+1<<endl
}
p=p->nexti++
}cout<<"查找完毕\n"
if(j==0)
cout<<"你查找的值不在链表中 、\n"
} }
void putline(link &l)
{
if(l==NULL ||l->next==NULL )
cout<<"链表未建立或是空的,请先构造链表\n"
else{
link p,q
p=l->next
while(p!=NULL)
{
q=p->next
while(q!=NULL)
{
if(p->date>q->date)
{ ElemType t
t=p->date
p->date=q->date
q->date=t
}
q=q->next
}
p=p->next
} cout<<"链表已经排序 \n"
}
}
/////////////////////////////// //////////////////
///////////////////////////////////////////////////
//////测试函数///// /////////////////////
void main()
{ link L=NULLint k
while(1)
{
cout<<"按0退出\n"<<"按1建立\n"<<"按2插入\n"<<"按3删除\n"
<<"按4清空链表\n"<<"按5查找\n"<<"按6进行排续\n"
print()
int a,i,j
cin>>a
switch(a)
{ case 0: if(L!=NULL)
destorylinst(L)
exit(1)
case 1:
IinitList(L)
k=0
print()
show(L)
cout<<"空的链表\n"
cout<<"链表长度为: "<<k<<endl
print()
cout<<"是否要给链表插入值:y----n\n"
char yy
yy=getchar()
if(yy=='y')
{
cout<<"请输入值!按回车键后输入下一个,输入0再按回车结束\n"
int bb
cin>>bb
while(bb!=0)
{ k++
listinsert(L,k,bb)
cin>>bb
}
print()
show(L) cout<<"链表长度为: "<<k<<endl
}
else break
print()
break
case 2:
if(L!=NULL)
{
cout<<"输入位置:\n"
cin>>i
while(i>k+1 || i<1)
{
cout<<"位置错误,重新输入插入位置\n"
cin>>i
}
cout<<"输入植;\n"
cin>>j
listinsert(L,i,j)
k++
print()
show(L)
cout<<"链表长度为:"<<k<<endl
print()
}
else
{ cout<<"链表不存在,请先建链表\n"
print()}
break
case 3:
if(L!=NULL)
{
cout<<"输入位置:\n"
cin>>i
while(i>k || i<1)
{
cout<<"位置错误,重新输入删除位置\n"
cin>>i
}
listdelete (L,i,j)
cout<<"你删除的是:\n"
cout<<j<<endl
k--print()
show(L)
cout<<"链表长度为:"<<k<<endl
print()
}
else {
cout<<"链表不存在,请先建链表\n"
print()
}
break
case 4:
destorylinst(L)
cout<<"链表已经清空\n"
print()
break
case 5:
print()
cout<<"输入要查找的值;\n"
int z
cin>>z
lookfor(L,z)
print()
break
case 6:
putline(L)
if(L!=NULL)
show(L)
print()
break
default:
break
}
}
delete L
}
数据结构中的算法,大部分都是用伪代码实现的,比如你这里的代码,它既包含了c语言的一些代码,同时也有c++的部分,这里只是想提供这种思路,该怎么做,但是当你把它想用完整的程序运行起来时,还是需要做一定工作的。以你的代码为例。
因为在书的前面已经定义了几种操作,ListLength(L)表示返回表L中的元素个数,GetElem(L,i,&e)表示用e返回L中第i个数据元素的个数,LocateElem(L, e , equal ) ) ListInsert ( L , i , e ) 等等,所以在这里就直接用了。
当用程序实现时,你要先将这几种功能实现,返回个数,得到第i个数据元素,等等,数据结构的话是教你一种程序设计的思想,具体细节自己实现。