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