实用数据结构实例.docx

上传人:b****8 文档编号:9203857 上传时间:2023-02-03 格式:DOCX 页数:72 大小:25.38KB
下载 相关 举报
实用数据结构实例.docx_第1页
第1页 / 共72页
实用数据结构实例.docx_第2页
第2页 / 共72页
实用数据结构实例.docx_第3页
第3页 / 共72页
实用数据结构实例.docx_第4页
第4页 / 共72页
实用数据结构实例.docx_第5页
第5页 / 共72页
点击查看更多>>
下载资源
资源描述

实用数据结构实例.docx

《实用数据结构实例.docx》由会员分享,可在线阅读,更多相关《实用数据结构实例.docx(72页珍藏版)》请在冰豆网上搜索。

实用数据结构实例.docx

实用数据结构实例

第一章

例1.1

#include"stdio.h"

#defineSIZE80

intstore(inta[]);

voidlookfor(inta[],intamount);

voidmain()

{intamount;

inta[SIZE];

amount=store(a);

lookfor(a,amount);

}

intstore(inta[])

{intamount,i;

printf("\n请输入钥匙总数");

scanf("%d",&amount);

for(i=0;i

{printf("\n请输入教室号:

");

scanf("%d",&a[i]);

}

returnamount;

}

voidlookfor(inta[],intamount)

{inti,number;

printf("\n请输入你要找的钥匙的教室号:

");

scanf("%d",&number);

for(i=0;i

if(a[i]==number)

{printf("请在第%d个钉子上取钥匙",i+1);

break;

}

if(i==amount)

printf("抱歉!

没有找到对应教室的钥匙!

");

}

例1.2

#include"stdio.h"

#defineU7

#defineV11

#defineW8

voidstore(inta[U][V][W]);

voidlookfor(inta[U][V][W]);

voidmain()

{staticinta[U][V][W];

store(a);

lookfor(a);

}

voidstore(inta[U][V][W])

{intamount,i,number,k,u,v;

printf("\n请输入钥匙的总数:

");

scanf("%d",&amount);

for(i=0;i

{printf("\n请输入教室号:

");

scanf("%d",&number);

u=number/1000;

v=(number-u*1000)/100;

printf("\nu=%dv=%d",u,v);

for(k=1;k<=W;k++)

if(a[u][v][k]==0)

{a[u][v][k]=number;

break;

}

}

}

voidlookfor(inta[U][V][W])

{inti,number,k,u,v;

printf("\n请输入你要找的钥匙的教室号:

");

scanf("%d",&number);

u=number/1000;

v=(number-u*1000)/100;

for(k=1;k<=W&&a[u][v][k]!

=0;k++)

{if(a[u][v][k]==number)

{printf("请在第%d个抽屉的第%d格子中取第%d个钥匙",u,v,k);

break;

}

}

if(k==W||a[u][v][k]==0)

printf("notfound!

抱歉!

没有找到对应教室的钥匙!

");

}

例1.3

#include"stdio.h"

#include"math.h"

#defineSIZE100

intprime1(inta[],intn)

{

inti,j,k=0,flag;

for(i=2;i<=n;i++)

{

flag=1;

for(j=2;j<=sqrt(i)&&flag;j++)

if(i%j==0)

flag=0;

if(flag==1)

{

a[k]=i;

k++;

}

}

returnk;

}

voidmain()

{

inti,k,a[SIZE/2];

k=prime1(a,SIZE);

printf("\n");

for(i=0;i<=k-1;i++)

printf("%-4d",a[i]);

}

例1.4

#include"stdio.h"

#defineSIZE100

#include"math.h"

voidprime2(inta[],intn)

{inti,j;

for(i=2;i<=n;i++)

a[i]=i;

for(i=2;i<=sqrt(n);i++)

for(j=i+1;j<=n;j++)

if(a[i]!

=0&&a[j]%a[i]==0)

a[j]=0;

}

voidmain()

{inti,a[SIZE];

prime2(a,SIZE);

printf("\n");

for(i=2;i<=SIZE;i++)

if(a[i]!

=0)

printf("%-4d",a[i]);

printf("\n");

}

例1.61.71.8

intguess1(intx)

{inti;

for(i=1;i<=100;i++)

if(i==x)

returni;

}

intguess2(intx)

{inti=0,low=1,high=100,middle;

do

{i++;

middle=(low+high)/2;

if(middle==x)

returni;

elseif(middle

low=middle+1;

else

high=middle-1;

}while

(1);

}

voidmain()

{

printf("\nguess1i=%d",guess1(67));

printf("\nguess2i=%d",guess2(67));

printf("\nguess1i=%d",guess1(15));

printf("\nguess2i=%d",guess2(15));

}

例1.9

#include"stdio.h"

Max1(inta[],intsize)

{inti,max=a[0];

for(i=0;i<=size;i++)

if(a[i]>max)

max=a[i];

returnmax;

}

Max2(inta[],intsize)

{inti,max_loca=0;

for(i=0;i<=size;i++)

if(a[i]>a[max_loca])

max_loca=i;

returnmax_loca;

}

voidmain()

{intb[]={10,20,30,40,50,60,70,80,90,100,2,3,5,9,40},size,x,y;

x=Max1(b,10);

y=Max2(b,10);

printf("%d,%d\n",x,y);

}

第二章

例2.1

#include"stdio.h"

#defineMAXSIZE20

#defineOverFlow-1

#defineOK1

#defineError-1

voidInit_SeqList(int*Length_pointer)/*构造一个空表*/

{*Length_pointer=0;

}

intInsert_Last(intElement[],int*Length_pointer,intx)/*插入一个元素(尾插)*/

{if(*Length_pointer==MAXSIZE-1)

{printf("表满");

returnOverFlow;

}

else

{Element[*Length_pointer]=x;

(*Length_pointer)++;

returnOK;

}

}

intLocation_SeqList(intElement[],intLength,intx)/*查找指定元素*/

{inti=0;

while(i

=x)

i++;

if(i==Length)

return-1;

elsereturni+1;

}

intDelete_SeqList(intElement[],int*Length_pointer,inti)

{intj;

if(i<1||i>*Length_pointer)

{printf("不存在第i个元素");

returnError;

}

for(j=i-1;j<=*Length_pointer-1;j++)

Element[j]=Element[j+1];

(*Length_pointer)--;

returnOK;

}

voidShow_SeqList(intElement[],intLength)

{intj;

printf("\n");

if(Length==0)

printf("空表(NULL)!

\n");

else

for(j=0;j

printf("%d",Element[j]);

}

voidSetNull_SeqList(int*Length_pointer)

{*Length_pointer=0;

}

voidmain()

{intx,i,loca;

intElement[MAXSIZE];/*存储线性表的数据元素*/

intLength;/*存储线性表的长度*/

Init_SeqList(&Length);/*构造一个空表*/

do

{printf("\n");

printf("1---插入一个元素(Insert)\n");

printf("2---查询一个元素(Locate)\n");

printf("3---删除一个元素(Delete)\n");

printf("4---显示所有元素(Show)\n");

printf("5---退出\n");

scanf("%d",&i);

switch(i)

{case1:

printf("请输入要插入的分数:

");

scanf("%d",&x);

if(Insert_Last(Element,&Length,x)!

=OK)

printf("插入失败\n");

break;

case2:

printf("请输入你要查询的分数\n");

scanf("%d",&x);

loca=Location_SeqList(Element,Length,x);

if(loca!

=-1)

printf("查找成功!

存储的位置:

%d",loca);

elseprintf("查找失败!

");

break;

case3:

printf("请输入要删除的分数:

");

scanf("%d",&x);

loca=Location_SeqList(Element,Length,x);

if(loca!

=-1)

if(Delete_SeqList(Element,&Length,loca)!

=OK)

printf("删除失败\n");

break;

case4:

Show_SeqList(Element,Length);break;

case5:

break;

default:

printf("错误选择!

请重选:

");break;

}

}while(i!

=5);

SetNull_SeqList(&Length);

}

2.3.2线性表使用结构体的算法实现

#include"stdio.h"

#defineMaxSize20

#defineOverFlow-1

#defineOK1

#defineError-1

typedefintElemType;

typedefstruct/*数据定义*/

{ElemTypeElement[MaxSize];

intLength;/*线性表的长度*/

}SeqList;

voidInit_SeqList(SeqList*L_pointer)/*构造一个空表*/

{L_pointer->Length=0;

}

intInsert_Last(SeqList*L_pointer,intx)/*插入一个元素(尾插)*/

{if(L_pointer->Length==MaxSize-1)

{printf("表满");

returnOverFlow;

}

else

{L_pointer->Element[L_pointer->Length]=x;/*表尾插入一个元素*/

(L_pointer->Length)++;/*线性表长度加1*/

returnOK;/*插入成功,返回OK*/

}

}

intLocation_SeqList(SeqList*L_pointer,intx)/*查找指定元素*/

{inti=0;

while(iLength&&L_pointer->Element[i]!

=x)

i++;

if(i==L_pointer->Length)/*查找失败*/

return-1;

elsereturni+1;/*查找成功,返回x的逻辑位置*/

}

intDelete_SeqList(SeqList*L_pointer,inti)/*删除指定元素*/

{intj;

if(i<1||i>L_pointer->Length)

{printf("不存在第i个元素");

returnError;

}

for(j=i-1;j<=L_pointer->Length-1;j++)

L_pointer->Element[j]=L_pointer->Element[j+1];/*数据向左移动*/

(L_pointer->Length)--;/*长度减1*/

returnOK;

}

voidShow_SeqList(SeqList*L_pointer)/*遍历线性表*/

{intj;

printf("\n");

if(L_pointer->Length==0)

printf("空表(NULL)!

\n");

else

for(j=0;jLength;j++)/*依次输出显示*/

printf("%d",L_pointer->Element[j]);

}

voidSetNull_SeqList(SeqList*L_pointer)/*清空线性表*/

{L_pointer->Length=0;

}

voidmain()

{intx,i,loca;

SeqListList;

Init_SeqList(&List);/*构造一个空表*/

do

{printf("\n");

printf("1---插入一个元素(Insert)\n");

printf("2---查询一个元素(Locate)\n");

printf("3---删除一个元素(Delete)\n");

printf("4---显示所有元素(Show)\n");

printf("5---退出\n");

scanf("%d",&i);

switch(i)

{case1:

printf("请输入要插入的分数:

");

scanf("%d",&x);

if(Insert_Last(&List,x)!

=OK)

printf("插入失败\n");

break;

case2:

printf("请输入你要查询的分数\n");

scanf("%d",&x);

loca=Location_SeqList(&List,x);

if(loca!

=-1)

printf("查找成功!

存储的位置:

%d",loca);

elseprintf("查找失败!

");

break;

case3:

printf("请输入要删除的分数:

");

scanf("%d",&x);

loca=Location_SeqList(&List,x);

if(loca!

=-1)

if(Delete_SeqList(&List,loca)!

=OK)

printf("删除失败\n");

break;

case4:

Show_SeqList(&List);break;

case5:

break;

default:

printf("错误选择!

请重选:

");break;

}

}while(i!

=5);

SetNull_SeqList(&List);/*清空线性表*/

}

程序2.3

#include"stdio.h"

#include"string.h"

#defineMaxSize20

#defineOverFlow-1

#defineOK1

#defineError-1

typedefcharElemType[10];

typedefstruct/*数据定义*/

{ElemTypeElement[MaxSize];

intLength;/*线性表的长度*/

}SeqList;

voidInit_SeqList(SeqList*L_pointer)/*构造一个空表*/

{L_pointer->Length=0;

}

intInsert_Last(SeqList*L_pointer,ElemTypex)/*插入一个元素(尾插)*/

{if(L_pointer->Length==MaxSize-1)

{printf("表满");

returnOverFlow;

}

else

{strcpy(L_pointer->Element[L_pointer->Length],x);/*表尾插入一个元素*/

(L_pointer->Length)++;/*线性表长度加1*/

returnOK;/*插入成功,返回OK*/

}

}

intLocation_SeqList(SeqList*L_pointer,ElemTypex)/*查找指定元素*/

{inti=0;

while(iLength&&strcmp(L_pointer->Element[i],x)!

=0)

i++;

if(i==L_pointer->Length)/*查找失败*/

return-1;

elsereturni+1;/*查找成功,返回x的逻辑位置*/

}

intDelete_SeqList(SeqList*L_pointer,inti)/*删除指定元素*/

{intj;

if(i<1||i>L_pointer->Length)

{printf("不存在第i个元素");

returnError;

}

for(j=i-1;j<=L_pointer->Length-1;j++)

strcpy(L_pointer->Element[j],L_pointer->Element[j+1]);/*数据向左移动*/

(L_pointer->Length)--;/*长度减1*/

returnOK;

}

voidShow_SeqList(SeqList*L_pointer)/*遍历线性表*/

{intj;

printf("\n");

if(L_pointer->Length==0)

printf("空表(NULL)!

\n");

else

for(j=0;jLength;j++)/*依次输出显示*/

puts(L_pointer->Element[j]);

}

voidSetNull_SeqList(SeqList*L_pointer)/*清空线性表*/

{L_pointer->Length=0;

}

voidmain()

{ElemTypex;

inti,loca;

SeqListList;

Init_SeqList(&List);/*构造一个空表*/

do

{printf("\n");

printf("1---插入一个元素(Insert)\n");

printf("2---查询一个元素(Find)\n");

printf("3---删除一个元素(Delete)\n");

printf("4---显示所有元素(Show)\n");

printf("5---退出\n");

scanf("%d",&i);

switch(i)

{case1:

printf("请输入要插入的名子:

");

scanf("%s",x);

if(Insert_Last(&List,x)!

=OK)

printf("插入失败\n");

break;

case2:

printf("请输入你要查询的名子\n");

scanf("%s",x);

loca=Location_SeqList(&List,x);

if(loca!

=-1)

printf("查找成功!

存储的位置:

%d",loca);

elseprintf("查找失败!

");

break;

case3:

printf("请输入要删除的名子:

");

scanf("%s",x);

loca=Location_SeqList(&List,x);

if(loca!

=-1)

if(Delete_SeqList(&List,loca)!

=OK)

printf("删除失败\n");

break;

case4:

Show_SeqList(&List);break;

case5:

break;

default:

printf("错误选择!

请重选:

");break;

}

}while(i!

=5);

SetNull_SeqList(&List);/*清空线性表*/

}

程序2.13顺序查找

#include"stdio.h"

#defineMaxSize

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

当前位置:首页 > PPT模板 > 其它模板

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

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