c语言有序合并使用函数 合并有序链表 c语言
C语言 顺序表的合并
1、c语言是没有引用的,可以使用一个const指针来模拟引用void InitList(SqList *L){L-last=0;}。
创新互联是一家专业从事成都网站制作、网站设计的网络公司。作为专业网络公司,创新互联依托的技术实力、以及多年的网站运营经验,为您提供专业的成都网站建设、成都全网营销推广及网站设计开发服务!
2、这个是顺序表的初始化,不用管int LenList(SqList L){return L.last;}。
3、插入操作,这一步是关键,插入顺序表int InsertList(SqList *L,int i,ElemType x){int k;if(L-last=MAX){printf("表已满,无法插入\n");return 0}else if(i0 || iL-last+1){printf("插入位置不合法\n");return 0;}。
4、这是接着上面的第二步,判断的else{for(k=L-last;ki-1;k--)L-elem[k]=L-elem[k-1];L-elem[i-1]=x;L-last++;return 0;}。
5、canf(%d",a) 是读取整型变量a在内存中的地址,而scanf("%d",a)是读取整型变量a的值。就完成了。
简单C程序两个有序数组合并 重组排序(简单的面试填空题)
这个有点类似归并排序
void merge(int a[],int n,int b[],int m,int *c)
{
int i,j;
for(i=j=0;injm;)
*c++=a[i]b[j]?a[i++]:b[j++];
while(__________________) // in 因为for循环可能没循环到n
*c++=a[i++]; //这里你漏了一个 i ,我补上了。
while(__________________) //jm 因为for循环有可能没循环到m
*c++=b[j++];
}
用c语言编写函数,对给定两个有序(升序)一维数组a,b进行合并,构成有序数组c。
#includestdio.h
#includestdlib.h
#includelimits.h
#define datelimit 1000 + 1 + 1
#define n 5
#define m 5 //datelimit 是最大的数组数 注意别开爆 n和m是a、b两队列的元素数用的时候修改后面的数字就可以了
int main()
{
int a[datelimit],b[datelimit],c[datelimit * 2];
int i,j,head;
int inf = INT_MAX;
for(i = 1 ;i = n;i++)
3scanf("%d",a[i]);
for(i = 1 ;i = m;i++)
scanf("%d",b[i]);
a[n + 1] = inf ;
b[m + 1] = inf ; //处理a或b的队列已经出完
i = 1;
j = 1;
head = 1;
while(i = n + 1 j = m + 1)
{
if(a[i] b[j])
{
c[head] = b[j];
head ++;
j ++;
}
else
{
c[head] = a[i];
head ++;
i ++;
}
} //进入c队列
for(i = 1 ;i = n + m;i++)
printf("%d ",c[i]);
system("pause"); //最好删去这一句 以免使用时出错
return 0;
}
C语言,合并两个有序字符串问题,求帮忙纠错
望采纳!!!
#include stdio.h
#includestring.h
int main()
{
char str1[100],str2[100],str[200];
int i,j,len1,len2,max,min,count;
char *p1,*p2;
while(scanf("%s %s",str1,str2)!=EOF)
{
p1=str1;p2=str2;
count=0;
len1=strlen(str1);
len2=strlen(str2);
max=len1len2?len1:len2;
min=len1len2?len1:len2;
for(i=0;ilen1+len2;i++)
{
if(*p1!='\0'*p2!='\0')
{
if(*p1*p2)
{
str[count++]=*p1;
p1++;
}
else
{
str[count++]=*p2;
p2++;
}
}
else if(*p1=='\0')
{
while(*p2)
{
str[count++]=*p2;
p2++;
}
}
else if(*p2=='\0')
{
while(*p1)
{
str[count++]=*p1;
p1++;
}
}
str[len1+len2]='\0';
}
printf("%s\n",str);
}
return 0;
}
用c语言编写程序实现将两个有序的文件进行合并,同时将生成的新文件输出到屏幕上,
#include "stdafx.h"
#include string.h
#include stdio.h
#include stdlib.h
struct STUDENT{
int Number;
char Name[32];
int Class;
float Score;
};
#define IS_WHITE(ch) ((unsigned char)ch=15 || ch==' ')
//trim函数去除字符串str前后的空白字符
char *trim(char *str)
{
char ch;
char *p, *q, *r;
p=str; q=str; r=str-1;
while(1)
{
ch=*p;
if (!IS_WHITE(ch)) break;
if (ch==0) break;
p++;
}
while(1)
{
ch=*p++;
*q=ch;
if (ch==0) break;
if (!IS_WHITE(ch)) r=q;
q++;
}
*++r=0;
return str;
}
int InputStudent(const char *filename)
{
FILE *f;
int n;
char str[200];
struct STUDENT student;
f=fopen(filename,"wb");
if (f==NULL) return 0; //返回0表示失败
for (n=0; ; ++n)
{
printf("请输入学号: "); scanf("%d", student.Number);
if (student.Number==0) break;
while(1)
{
printf("请输入姓名:"); gets(str);
trim(str);
if (str[0]==0) continue; //确保姓名不为空
strncpy(student.Name, str, sizeof(student.Name)-1);
//上句确保输入姓名长度不超过31字节
break;
}
printf("请输入班级:\n"); scanf("%d", student.Class);
printf("请输入成绩:\n"); scanf("%f", student.Score);
fwrite(student, sizeof(student),1, f);
// printf("%08d %-32s %-3d %f\n",
// student.Number,
// student.Name,
// student.Class,
// student.Score);
}
fclose(f);
return n; //返回有多少个学生信息录入
}
void SortStudent(struct STUDENT *student, int n)
{
int i,j;
struct STUDENT *a, *b, t;
for (j=0; jn-1; ++j)
{
a=student+j;
for (i=j+1; in; ++i)
{
b=student+i;
if (a-Number=b-Number) continue; //否则交换
memcpy(t,a,sizeof(struct STUDENT));
memcpy(a,b,sizeof(struct STUDENT));
memcpy(b,t,sizeof(struct STUDENT));
}
}
}
void PrintStudent(const struct STUDENT *student, int n)
{
int i;
for (i=0; in; ++i, ++student)
printf("%08d %-32s %-3d %6.1f\n",
student-Number,
student-Name,
student-Class,
student-Score);
}
void main()
{
int n1, n2, n;
struct STUDENT *student;
const char fn1[]="d:\\student1.bin"; //文件1
const char fn2[]="d:\\student2.bin"; //文件2
const char fn[]="d:\\student.bin"; //合并后的文件
FILE *f;
printf("学生信息录入(录入过程中,学号输入为0,则退出录入)\n");
printf("第一步:%s中的学生信息录入:\n", fn1);
n1=InputStudent(fn1);
if (0==n1)
{
printf("%s中的学生信息录入有误,退出程序\n",fn1);
return;
}
printf("第二步:%s中的学生信息录入:\n", fn2);
n2=InputStudent(fn2);
if (0==n2)
{
printf("%s中的学生信息录入有误,退出程序\n",fn2);
return;
}
printf("第三步:合并%s, %s\n",fn1,fn2);
student=(struct STUDENT *)malloc((n1+n2)*sizeof(struct STUDENT));
f=fopen(fn1,"rb");
if (f==NULL) {printf("%s打开失败,退出程序\n",fn1); return;}
n=fread(student,sizeof(struct STUDENT), n1, f);
fclose(f);
if (n!=n1) {printf("%s读入错误,退出程序\n",fn1); return;}
f=fopen(fn2,"rb");
if (f==NULL) {printf("%s打开失败,退出程序\n",fn2); return;}
n=fread(student+n1,sizeof(struct STUDENT), n2, f);
// PrintStudent(student,n1+n2); //输出学生信息
fclose(f);
if (n!=n2) {printf("%s读入错误,退出程序\n",fn2); return;}
n=n1+n2;
SortStudent(student,n);
f=fopen(fn,"wb");
if (f==NULL) {printf("%s建立失败,退出程序\n",fn); return;}
fwrite(student, sizeof(struct STUDENT), n, f);
fclose(f);
PrintStudent(student,n); //输出学生信息
free(student);
}
名称栏目:c语言有序合并使用函数 合并有序链表 c语言
路径分享:http://azwzsj.com/article/hisjij.html