用C语言实现数据结构中常用算法,如对链表的操作、查找、排序等。

Python014

用C语言实现数据结构中常用算法,如对链表的操作、查找、排序等。,第1张

调试过的

没什么大的毛病

#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个数据元素,等等,数据结构的话是教你一种程序设计的思想,具体细节自己实现。