北京交通大学数据结构上机实验1Word文档下载推荐.docx

上传人:b****3 文档编号:16424133 上传时间:2022-11-23 格式:DOCX 页数:17 大小:18.51KB
下载 相关 举报
北京交通大学数据结构上机实验1Word文档下载推荐.docx_第1页
第1页 / 共17页
北京交通大学数据结构上机实验1Word文档下载推荐.docx_第2页
第2页 / 共17页
北京交通大学数据结构上机实验1Word文档下载推荐.docx_第3页
第3页 / 共17页
北京交通大学数据结构上机实验1Word文档下载推荐.docx_第4页
第4页 / 共17页
北京交通大学数据结构上机实验1Word文档下载推荐.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

北京交通大学数据结构上机实验1Word文档下载推荐.docx

《北京交通大学数据结构上机实验1Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《北京交通大学数据结构上机实验1Word文档下载推荐.docx(17页珍藏版)》请在冰豆网上搜索。

北京交通大学数据结构上机实验1Word文档下载推荐.docx

#defineERROR0

#defineOK1

typedefintstatus;

typedefintelemtype;

typedefstructLNode

{

elemtypedata;

structLNode*next;

}LNode,*LinkList;

CreatList_L(LinkList&

L,intn)

LinkListp,q;

inti=0;

L=(LinkList)malloc(sizeof(LNode));

if(!

L)exit(0);

q=(LinkList)malloc(sizeof(LNode));

q)exit(0);

L->

next=q;

printf("

请输入一个元素:

\n"

);

scanf("

%d"

&

q->

data);

p=q;

while(q->

data!

=-1)

{

q=(LinkList)malloc(sizeof(LNode));

if(!

请输入另一个元素:

p->

i++;

}

next=NULL;

链表长度为:

%d\n"

i);

returnOK;

}

voidprint(LinkList&

L)

LinkListp=L->

next;

while(p!

=NULL&

&

data!

=-1)

printf("

%3d"

p->

p=p->

statusListInsert_L(LinkList&

L,inti,elemtype&

e)

intj=0;

LinkListp,q;

p=L;

while(p&

j<

i-1)

p=p->

j++;

q=(LinkList)malloc(sizeof(LNode));

data=e;

next=p->

p->

return1;

statusListDelet_L(LinkList&

i)

q=p;

e=p->

data;

next=q->

next->

free(p);

returne;

statusGetElem_L(LinkListL,inti,elemtype&

LinkListp;

intj;

p=L->

j=1;

(j<

i)){

p=p->

if(!

p||j>

returnERROR;

returnOK;

statusListReverse(LinkList&

LinkListt,p,q;

t=L->

p=t->

t->

=NULL)

q=p->

next=t;

t=p;

L=t;

voidMostList(LinkListL){

LinkListp;

inti,j;

p=L->

i=j=p->

while(p){

if(i<

data)i=p->

if(j>

data)j=p->

p=p->

最大值为:

%d\n"

最小值为:

j);

voidmain()

LinkListL;

intn,e,k,m,i;

CreatList_L(L,n);

print(L);

printf("

逆置后的单链表为:

ListReverse(L);

请输入要插入的数据:

scanf("

&

e);

请输入要插入元素的位置:

n);

ListInsert_L(L,n,e);

请输入要删除的数据的位置:

被删除的元素是:

k=ListDelet_L(L,n,k);

k);

删除后的单链表为:

请输入所要显示的元素的位置:

i);

所取出的元素是:

GetElem_L(L,i,m);

m);

MostList(L);

}四)链表的合并(1分)

(1)创建两个链表LA,LB(各链表按升序排列),分别显示两链表;

(2)将两个链表合并成一个新的有序表(升序排列),显示链表.

typedefchardatatype;

typedefstructnode

datatypedata;

structnode*next;

}listnode;

typedeflistnode*linklist;

linklistcreatlist();

voidprintlist(linklist);

linklistlistadd(linklist,linklist);

linklistla=creatlist();

linklistlb=creatlist();

//printlist(la);

//printlist(lb);

linklistlc=listadd(la,lb);

合并后的单链表为:

printlist(lc);

linklistcreatlist()//创建单链表

charch;

linklisthead=(linklist)malloc(sizeof(listnode));

linklistp,q;

q=head;

while((ch=getchar())!

='

\n'

p=(linklist)malloc(sizeof(listnode));

data=ch;

q->

next=p;

returnhead;

voidprintlist(linklisthead)//输出单链表

linklistp;

for(p=head->

p;

next)

%c"

linklistlistadd(linklistla,linklistlb)//两链表合并

linklistpb,pa,p,q;

for(pa=la->

next,pb=lb->

pa&

pb;

if(pa->

data>

pb->

data)

data=pb->

pb=pb->

elseif(pa->

data<

data=pa->

pa=pa->

else

if(pa==NULL&

pb!

while(pb!

if(pa!

=NULL&

pb==NULL)

while(pa!

五)单循环链表(2分)

(1)建两个带头结点的循环单链表LA,LB单循环链表,

(2)将两个循环单链表合并为一个循环单链表,其头指针为LA。

typedefstructLnode{

intdata;

structLnode*next;

}LNode,*LinkList;

LinkListCreatList_L(void){

LinkListhead;

LinkListp1,p2;

head=p1=p2=(LinkList)malloc(sizeof(LNode));

d"

p1->

head->

next=p1;

while(p1->

=-1){

p2->

p2=p1;

p1=(LinkList)malloc(sizeof(LNode));

next=head;

LinkListMergeList(LinkListLA,LinkListLB){

LinkListp,q,m,n;

n=LA;

p=LA->

q=m=LB->

while(p->

next!

=LA)

while(q->

=LB)

q=q->

next=m;

returnn;

voidShowList(LinkListL){

链表为:

=L){

LinkListLA,LB,LC;

请输入循环链表A的元素:

"

LA=CreatList_L();

ShowList(LA);

请输入循环链表B的元素:

LB=CreatList_L();

ShowList(LB);

LC=MergeList(LA,LB);

合并后"

ShowList(LC);

}六)单链表应用(2分)

建立一个带头结点的线性链表,用以存放输入的二进制数,链表中每个结点的data域存放一个二进制位,并在此链表上实现对二进制数加1的运算。

#include<

conio.h>

/*链表结点*/

typedefstruct_Node

struct_Node*next;

/*指向下一个结点*/

unsignedcharbit;

/*当前结点所代表的二进制位*/

}Node;

/*在链表的结尾添加一个结点*/

voidaddNode(Node*prior,unsignedcharbit)

Node*node=(Node*)malloc(sizeof(Node));

node->

next=NULL;

bit=bit;

prior->

next=node;

voidinsToHead(Node*head,unsignedcharbit)

next=head->

Node*createList(void)

intbit;

Node*head=(Node*)malloc(sizeof(Node));

while((bit=getch())!

=26)

if(bit=='

1'

||bit=='

0'

bit=bit-'

;

bit);

insToHead(head,bit);

/*低端二进制位放在链表的前面*/

voidinc(Node*head)

Node*node;

unsignedcharadd;

/*头结点并不算在二进制数中,所以它的二进制位是无效的*/

/*如果只有头结点,加1则生成一个结点*/

/*这就是说生成一个值为1的二进制数链表*/

if(head->

next==NULL)

addNode(head,1);

return;

add=1;

node=head;

/*add表示要在当前结点的后续结点的二进制值上加1*/

while(add)

/*如果当前结点的后续结点不存在,则增加一个结点在结尾,且其值为1*/

if(node->

addNode(node,1);

/*如果当前结点的后续结点存在,则直接把其值加1*/

node=node->

/*如果后续结点的值本来为1,重设其值为0,且需要进位*/

bit==1)

bit=0;

/*如果后续结点的值本来为0,重设其值为1,且不必进位,结束算法*/

bit=1;

add=0;

/*删除链表,传入头结点*/

voiddelList(Node*node)

if(node==NULL)

next!

=NULL)

delList(node->

next);

free(node);

/*加法操作方便了,打印就比较麻烦,用递归来做。

*/

/*注意传进来的参数是头结点的后续结点哦!

voidprint(Node*node)

Emptylist!

print(node->

%1d"

node->

bit);

intmain(void)

/*生成链表头结点*/

Node*head;

Pleaseinputthebinary:

head=createList();

inc(head);

print(head->

/*打印链表*/

delList(head);

return0;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1