c語言線性表的合並
A. 創建並合並兩個線性表 c語言
其中一個程序調用鎮畢另一個程序的方式,使用系統調用system可以。
如果兩個程序要交換使用數據,可以用建立文件作為數據交換的「通道」。
如果你不知道這李改兩個程序的代碼,那麼就新建一個可以哪旅判調用這兩個已知程序的程序吧
B. 將兩個有序線性表合並成一個有序線性表,用C語言 在線急等!!!!
代碼寫好了。
經測試VC下通過。
#include <stdio.h>
int merge(int *a,int n1,int *b,int n2,int *s)
{
int i=0,j=0,k=0;
while(i<n1&&j<n2)
{
if(a[i]>b[j]){
if(k&&s[k-1]==b[j])//有重復元素
j++;
else
s[k++]=b[j++];
}
else{
if(k&&s[k-1]==a[i])//有重復元素
i++;
else
s[k++]=a[i++];
}
}
while(i<n1){
if(k&&s[k-1]==a[i])
i++;
else
s[k++]=a[i++];
}
while(j<n2){
if(k&&s[k-1]==b[j])//有重復元素
j++;
else
s[k++]=b[j++];
}
return k;
}
int main()
{
int a[100],b[100],s[200],n1,n2,i,n3;
printf("輸入第一個數組元素個數:");
scanf("%d",&n1);
printf("輸入%d個升廳弊序元素(空格隔開):",n1);
for(i=0;i<n1;i++)
scanf("%d",&a[i]);
printf("輸入第二個數組元素個數:");
scanf("%d",&n2);
printf("輸入%d個升序元素(空格隔開)數伏弊:",n2);
for(i=0;i<n2;i++)
scanf("%d",&b[i]);
n3=merge(a,n1,b,n2,s); //a和b數組的元素合並到s數組里去(並消除重復元素),並返回合並後數組的元素個數
printf("合並後元素數組為:");
for(i=0;i<n3;i++)
printf("%d "薯族,s[i]);
printf("\n");
return 0;
}
附測試數據一組:
5
3 50 50 100 100
3
8 50 80
輸出為:3 8 50 80 100
C. 求大神幫忙用C語言寫一個程序。 要求:定義兩個線性表(內容由用戶輸入),合並這兩個線性表,並按順序
#include<stdio.h>
#include <stdlib.h>
#include<string.h>
#include <stdbool.h>
typedef struct{
int *data;
int length; // 線性表的長度
int top; // 線性表的當前元素個數
}List;
// 初始化線性表
void list_init(List *li,int length){
li->length = length;
li->top = 0;
li->data = (int*) malloc(li->length * sizeof(int));
}
// 向線性表插入元素余顫
bool add_list(List* li, int data){
if(li->top >= li->豎嘩敗length){
return false;
}
li->data[li->top++] = data;
return false;
}
// 將兩個線性表合並並對元素蘆咐進行排序
void merge_list(List *dest, List *li1, List *li2){
list_init(dest, li1->top+li2->top+1);
// 把線性表li1,li2的所有元素添加到線性表dest中
int i = 0;
while(i < li1->top){
add_list(dest, li1->data[i]);
i++;
}
i = 0;
while(i < li2->top){
add_list(dest, li2->data[i]);
i++;
}
// 把線性表dest元素進行排序(由大到小)
for(i=0; i<dest->top; i++){
int j;
for(j=i; j<dest->top; j++){
if(dest->data[i] < dest->data[j]){
int t = dest->data[i];
dest->data[i] = dest->data[j];
dest->data[j] = t;
}
}
}
}
// 顯示線性表
void show_list(List *li){
int i;
for(i=0; i<li->top; i++){
printf("%3d",li->data[i]);
if((i+1)%10 == 0){
printf("\n");
}
}
printf("\n");
}
int main(void)
{
int arr1[7]={11,4,7,2,9,15,10};
int arr2[5]={2,1,5,1,19};
List li1;
list_init(&li1, 50);
int i;
for(i=0; i<7; i++){
add_list(&li1,arr1[i]);
}
show_list(&li1);
List li2;
list_init(&li2, 50);
for(i=0; i<5; i++){
add_list(&li2,arr2[i]);
}
show_list(&li2);
List dest;
merge_list(&dest, &li1, &li2);
show_list(&dest);
return 0;
}
D. c語言有序線性表合並數據
由於結果保存的表類型不同,
演算法也有差別,
我選擇結果保存為動態數組的演算法,
其它演算法可以自己搞.
1,
計算含派La的元素個數賦值給氏老絕numOfLa;
計算Lb的元素個數賦值給numOfLb;
2,
分配能夠容納numOfLa+numOfLb個元素的內存空間,
首地址指針為pRes;
3,
設置變數counterLa並賦初值0,
設置變數counterLb並賦初值0,
設置變數counterRes並賦初值0
4,
當counterLa
<
numOfLa
並且
counterLb
<
numOfLb時做以下步:
4.1
如果La[counterLa]
等於Lb[counterLb]時,
pRes[couterRes]賦值為La[couterLa],
couterLa和counterLb
和counterRes三者均加一,
否則
4.2
如果La[counterLa]
小於Lb[counterLb]時,
pRes[couterRes]賦值為La[couterLa],
counterLa和couterRes兩者均加一,
否則
4.3
pRes[couterRes]賦值為Lb[couterLb],
counterLb和couterRes兩者均加一
5,
如果counterLa等於numOfLa,
則從i
=
couterLb
至i
<
numOfLb做以下:
5.1
pRes[counterRes]
賦值為
Lb[i]
5.2
counterRes和i兩者增一;
6,
否則,
從i
=
couterLa
至i
<
numOfLa做以下:
6.1
pRes[counterRes]
賦值為
La[i]
6.2
counterRes和殲姿i兩者增一;
7結束,
pRes中保存合並的線性表數據,
數據個數為counterRes;
在此基礎上,
也可以寫出鏈表的演算法
E. 求C語言程序代碼,合並線性表
#include<stdio.h>
#include<stdlib.h>
#defineMAXSIZE110
typedefstruct
{
intelem[MAXSIZE];
intlen;
}sqlist;
voidmerge(sqlist*la,sqlist*lb,sqlist*lc)
{
inti,j,k;
i=j=k=0;
if(la->len+lb->len<=MAXSIZE)
{
while(i<la->len&&j<lb->len)
{
if(la->elem[i]<lb->elem[j])
{
lc->elem[k]=la->elem[i];
i++;
k++;
}
else
{
lc->elem[k]=lb->elem[j];
j++;
k++;
}
}
while(i<la->len)
{
lc->elem[k]=la->elem[i];
i++;
k++;
}
while(j<lb->len)
{
lc->elem[k]=lb->elem[j];
j++;
k++;
}
lc->len=la->len+lb->len;
}
elseprintf("outofbound");
}
voidprint(sqlist*l)
{
悶或租inti;
for(i=0;i<l->len;i++)
{
printf("團坦%d",l->elem[i]);
螞兆}
printf(" ");
}
intmain(void)
{
inti;
sqlistla;
sqlistlb;
sqlistlc;
printf("輸入線性表LA的元素個數:");
scanf("%d",&la.len);
printf("輸入線性表LA的%d個元素:",la.len);
for(i=0;i<la.len;i++)
scanf("%d",&la.elem[i]);
printf("輸入線性表LB的元素個數:");
scanf("%d",&lb.len);
printf("輸入線性表LB的%d個元素:",lb.len);
for(i=0;i<lb.len;i++)
scanf("%d",&lb.elem[i]);
merge(&la,&lb,&lc);
print(&lc);
system("pause");
return(0);
}
F. 數據結構C語言版,順序線性表的合並程序。最好有注釋
//希望我的回答對你的學習有幫助
#include<stdlib.h>
/*順序表存儲空間長度的最小值*/
#defineLISTMINSIZE10
/*順序表存儲結構類型定義*/
typedefstruct
{
ListDT*base;/*順序表空間基地址*/
intlistsize;/*順序表空間尺寸*/
intlen;/*順序表長度*/
}SeqList;
/*順序表初始化*/
voidListInitialize(SeqList*pL,intsize)
{
if(size<LISTMINSIZE)
size=LISTMINSIZE;/*限定不能小於最小尺寸*/
pL->listsize=size;
pL->base=(ListDT*)malloc(pL->listsize*sizeof(ListDT));
if(!pL->base)
纖虧exit(EXIT_FAILURE);
pL->len=0;/*初始化空表*/
}
/*按給定的下標取順序表元素值*/
BOOLListElem(SeqListL,intindex,ListDT*pelem)
{
BOOLflg=TRUE;
if(index<0||index>L.len-1)
flg=FALSE;/*參數越界*/
else
*pelem=L.base[index];
returnflg;
}
/*求順序表長度*/
intListLen(SeqListL)
{
returnL.len;
}
/*在順序表中指定序號位置插入元素*/
BOOLListInsert(SeqList*pL,intpos,ListDTd)
{
BOOLflg=TRUE;
inti;
if(pos<0||pL->len>=pL->listsize||pos>pL->len)
flg=FALSE;
else
{
for(i=pL->len-1;i>=pos;i--)/*移動數據*/
pL->base[i+1]=pL->base[i];
pL->base[pos]=d;/*寫入數據*/
pL->len++;/*表長增1*/
}
returnflg;
}
/*把順序表中指定序號的元素刪除*/
BOOLListDel(SeqList*pL,intpos)
{
BOOLflg=TRUE;
inti;
if(pos<0||pos>=pL->len)
flg=FALSE;
else
含悔{
for(i=pos+1;i<pL->len;i++)/*移動數據*/
pL->base[i-1]=pL->base[i];
pL->len--;/*表長增1*/
談豎正}
returnflg;
}
/*在順序表中查找元素*/
intListLoc(SeqListL,ListDTd,BOOL(*equal)(ListDT,ListDT))
{
intpos=L.len-1;
while(pos>=0&&!(*equal)(L.base[pos],d))
pos--;
returnpos;
}
/*取前導元素序號位置*/
BOOLListPrior(SeqListL,intpos,int*ppriorpos)
{
BOOLflg=TRUE;
if(pos>0&&pos<L.len)
*ppriorpos=pos-1;
else
flg=FALSE;
returnflg;
}
/*取後繼元素序號位置*/
BOOLListNext(SeqListL,intpos,int*pnextpos)
{
BOOLflg=TRUE;
if(pos>=0&&pos<L.len-1)
*pnextpos=pos+1;
else
flg=FALSE;
returnflg;
}
/*銷毀順序表*/
voidListDestroy(SeqListL)
{
free(L.base);
}
#endif
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
/*
建議性測試用程序
*/
typedefenum{TRUE=1,FALSE=0}BOOL;
typedefintListDT;
#include"seqlist.c"
voidprintSeqList(SeqListL)
{
inti;
ListDTx;
printf(" List: ");
for(i=0;i<ListLen(L);i++)
{
ListElem(L,i,&x);
printf("%3d",x);
}
}
BOOLdataequal(intx,inty)
{
return(x==y)?TRUE:FALSE;
}
#defineN5
voidmain()
{
inti,prior,next;
ListDTx,test[N]={10,20,30,40,50};
SeqListL;
/*初始化順序表*/
ListInitialize(&L,N);
/*在表頭插入N個元素*/
for(i=0;i<N;i++)
ListInsert(&L,0,test[i]);
printSeqList(L);
/*刪除元素*/
ListDel(&L,N/2);
printSeqList(L);
printf(" inputakey: ");
scanf("%d",&x);
/*查找x在表中位置*/
i=ListLoc(L,x,dataequal);
/*求x的前導元素*/
if(ListPrior(L,i,&prior))
{
ListElem(L,prior,&x);
printf("Prior:%d ",x);
}
else
printf("noPrior. ");
/*求x的後繼*/
if(ListNext(L,i,&next))
{
ListElem(L,next,&x);
printf("Next:%d ",x);
}
else
printf("noNext. ");
/*求表長*/
printf("Listlength=%d",ListLen(L));
/*銷毀順序表*/
ListDestroy(L);
}