没有合适的资源?快使用搜索试试~ 我知道了~
数据结构的语言算法.docx
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 195 浏览量
2023-09-22
13:22:14
上传
评论
收藏 71KB DOCX 举报
温馨提示
试读
62页
数据结构的语言算法.docx
资源推荐
资源详情
资源评论
数据结构的
数据结构的
语言算法
语言算法
以下数据结构算法由 C 语言编译,并在 TC 上运行通过,其中,扩展名为”.CPP”
的为头文件,运行时只需将头文件与相应算法连接即可。
第一章 绪论(预备知识)
练习 1.16
/*试写一算法,自大至小输出顺序读入的三个整数 X,Y 和 Z 的值*/
#include <stdio.h>
void swap(int *x,int *y,int *z)
{ int t;
if(*x<*y) t=*x;*x=*y;*y=t;
if(*y<*z) t=*y;*y=*z;*z=t;
if(*x<*y) t=*x;*x=*y;*y=t;
}
main()
{int a,b,c;
scanf("%d,%d,%d",&a,&b,&c);
swap(&a,&b,&c);
printf("%d %d %d",a,b,c);
}
第二章 线性表
1
.顺序表
实现顺序表基本算法的头文件 sq.cpp 为:
#include<stdio.h>
#define MaxLen 50/*顺序表中最多元素个数*/
typedef int elemtype;
typedef elemtype sqlist[MaxLen];
int create(sqlist A)/*创建线形表*/
{
int i,n;
printf("创建一个顺序表:\n");
printf("输入元素个数:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("输入第%d 个元素值:",i+1);
scanf("%d",&A[i]);
}
return n;
}
void disp(sqlist A,int n)/*输出一个顺序表*/
{
int i;
printf("输出一个顺序表: \n");
if(n==0) printf("空表");
for(i=0;i<n;i++)
printf("%d ",A[i]);
printf("\n");
}
int ins(sqlist A,int n,int i,elemtype x)
/*在顺序表第 i 个元素前插入一个元素 x,若 i=0,则新元素作为
第一个元素,若 i=1,则插入在最后*/
{
int j;
if(i<0||i>n) printf("i 值下溢或上溢\n");
else
{
for(j=n-1;j>=i;j--) A[j+1]=A[j];
/*将第 i 个元素及其后的元素后移*/
A[i]=x;n++;/*顺序表长度加 1*/
}
return n;
}
int del(sqlist A,int n,int i)
/*在顺序表中删除第 i 个元素*/
{
int j;
if(i<=0||i>n) printf("i 值下溢或上溢\n");
else
{
for(j=i-1;j<n;j++) A[j]=A[j+1];
/*将第 i 个元素之后的元素前移覆盖 A[i]*/
n--; /*顺序表长度减 1*/
}
return n;
}
int find(sqlist A,int n,elemtype x)
/*在一个有 n 个元素的顺序表 A 中查找元素值为 x 的元素*/
{
int i=0;
while(i<=n&&A[i]!=x) i++;
if(i<n) return 1;
else return 0;
}
练习 2.11:
/*设顺序表 va 中的数据元素递增有序。试写一算法,将 x 插入到顺序表的适当位置上,以保持该表的有序
性*/
#include"sq.cpp"
int insert(sqlist A,int n,elemtype x)/*顺序表 A 的长度为 n*/
{
int i,j;
if(x>=A[n-1]) A[n]=x;
/*若 x 大于最后的元素,则将其插入到最后*/
else
{
i=0;
while(x>A[i]) i++;/*查找插入位置 i*/
for(j=n;j>=i;j--) A[j+1]=A[j];
/*移出插入 x 的位置*/
A[i]=x;
}
return (n+1);/*顺序表长度增 1*/
}
void main()
{
sqlist A;
int n;
n=create(A);
disp(A,n);
n=insert(A,n,10);/*插入元素 10*/
disp(A,n);
getch();
}
/*运行结果:
创建一个顺序表
输入元素个数:3
输入第 1 个元素值:6
输入第 1 个元素值:9
输入第 1 个元素值:14
输出一个顺序表
6 9 14
输出一个顺序表
6 9 10 14 */
练习 2.12
/*设 A=(a
1
,…,a
m
)和 B=(b
1
,…,b
m
)均为顺序表,A’和 B’分别为 A 和 B 中除去最大共同前缀后的子表(例
如,A=(x,y,y,z,x,z),B=(x,y,y,z,y,x,x,z),则两者中最大的共同前缀为(x,y,y,z),在两表中除去最大的共同
前缀后的子表分别为 A’=(x,z)和 B’=(y,x,x,z)。若 A’=B’=空表,则 A=B;若 A’=空表,B’!=空表,或者两者
均不为空表,且 A’的首元小于 B’的首元,则 A<B;否则 A>B。试写一个比较 A,B 大小的算法(请注意:
在算法中,不要破坏原表 A 和 B,并且,也不一定先求得 A’和 B’才能进行比较)*/
#include"sq.cpp"
int comp(sqlist A,int na,sqlist B,int nb)
{ int i=0,j=0;
while(i<na&&j<nb&&A[i++]==B[j++]);/*比较相同部分*/
i--;j--;
if(i==na&&j==nb) return 0;/*a=b*/
if(i==na&&j!=nb) return -1;/*a<b*/
if(i!=na&&j==nb) return 1;/*a>b*/
if(A[i]>B[j])
return 1;
else return -1;
}
void main()
{ sqlist A,B;
int na,nb,n;
na=create(A);
nb=create(B);
n=comp(A,na,B,nb);
switch(n)
{
case 0:printf("A=B\n"); break;
case 1:printf("A>B\n"); break;
case -1:printf("A<B\n"); break;
}
getch();
}
/*运行结果
创建一个顺序表
输入元素个数:3
输入第 1 个元素值:2
输入第 1 个元素值:3
输入第 1 个元素值:5
创建一个顺序表
输入元素个数:4
输入第 1 个元素值:2
输入第 1 个元素值:3
输入第 1 个元素值:4
输入第 1 个元素值:5
比较结果:A>B
*/
练习 2.16
/*删除 A 中第 i 个元素起的 k 个元素*/
#include"sq.cpp"
int delk(sqlist A,int *n,int i,int k)
{
剩余61页未读,继续阅读
资源评论
南抖北快东卫
- 粉丝: 70
- 资源: 5584
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功