❶ c語言中,兩個字元指針怎麼進行拼接
先加頭文件#include<string.h>
char a[10]="123";
char b[10]="abc";
strcat(a,b); //連接兩個字元串,連接後的字元串存放在a中,數組a中有足夠空間
printf("%s",a); //輸出連接後的字元串
或:
#include<string.h>
char a[10]="123";
char b[10]="abc";
char c[20];
strcpy(c,a); //把串a復制到有足夠空間的c中
strcat(c,b); //把b連接到c的串尾
❷ c語言如何實現兩鏈表合並
只要讓第一個鏈表的尾部元素 的 next 指針,指向第二個鏈表的第一個元素就可以了
如果是雙向鏈表,則除上面操作外,再讓第二個鏈表的 prev指針指向第一個鏈表最後一個元素
❸ C語言,怎麼使用指針實現合並兩個有序數組
各種語法錯誤,這個連編譯都不行。
i++是指自加1,後面不能加數字;
最上面的解引用那裡估計你括弧放錯了,*號要在括弧外面
數字a和數組b,直接int *i=a;就行,不需要再取地址。
printf中,i是一個整數,不能被解引用。
❹ 用指針合並兩個字元串(C語言)
#include<stdio.h>
void fun(char* dest, char* s1, char* s2)
{
while (*dest++=*s1++);
dest--;
while (*dest++=*s2++);
}
main()
{
char dest[256];
char* s1="Happy ";
char* s2="New Year";
fun(dest,s1,s2);
printf("%s\n",dest);
}
❺ c語言中鏈表合並怎麼弄詳解
鏈表是一種物理存儲單元上非連續、非順序的存儲結構,數據元素的邏輯順序是通過鏈表中的指針鏈接次序實現的。鏈表由一系列結點(鏈表中每一個元素稱為結點)組成,結點可以在運行時動態生成。每個結點包括兩個部分:一個是存儲數據元素的數據域,另一個是存儲下一個結點地址的指針域。相比於線性表順序結構,操作復雜。
使用鏈表結構可以克服數組鏈表需要預先知道數據大小的缺點,鏈表結構可以充分利用計算機內存空間,實現靈活的內存動態管理。但是鏈表失去了數組隨機讀取的優點,同時鏈表由於增加了結點的指針域,空間開銷比較大。在計算機科學中,鏈表作為一種基礎的數據結構可以用來生成其它類型的數據結構。鏈表通常由一連串節點組成,每個節點包含任意的實例數據(datafields)和一或兩個用來指向上一個/或下一個節點的位置的鏈接("links")。鏈表最明顯的好處就是,常規數組排列關聯項目的方式可能不同於這些數據項目在記憶體或磁碟上順序,數據的存取往往要在不同的排列順序中轉換。而鏈表是一種自我指示數據類型,因為它包含指向另一個相同類型的數據的指針(鏈接)。鏈表允許插入和移除表上任意位置上的節點,但是不允許隨機存取。鏈表有很多種不同的類型:單向鏈表,雙向鏈表以及循環鏈表。
以上是對鏈表的一個概述,說的其實很全面了。我們應用鏈表就是為了克服順序表(數組)必須在內存中連續分配相鄰地址的束縛,更好的應用內存空間(很多破碎不連貫空間)。
你可以把鏈表類比成貨運火車,火車的每一節車皮就是鏈表的每一個結點(一般用link表示),每個結點實際上有兩個部分,一個部分是裝貨的空間就是鏈表的數據存儲部分(一般用link—>data表示),另一部分就是與下一節車廂的連接部分就是鏈表的指針部分(用link—>next表示,指向下一個結點)。那麼我們平時怎樣管理火車呢?記住火車的第一節車皮即可,順著第一節就能找到找到所有的車皮。鏈表也是如此,有了頭結點(一般用head表示)就能找到所有的結點。這里缺點就來了,比如一共100節車皮,我讓你找49節車皮,那你就必須從第一節車皮開始找,否則你沒辦法確定哪個是第49節。鏈表也是如此,必須從頭結點開始找起,這也就是為什麼要記住頭結點的原因之一。相比數組直接按照序號訪問,鏈表的訪問要麻煩很多。同樣我們也需要記住尾結點,就好像我們在一列長火車的尾部插一面小紅旗,那麼列車工人就能方便找到車尾,把需要的車皮掛載到這列火車上;鏈表同樣如此,我們用tail來標記尾結點,直接把需要增加的結點載入到鏈表上即可,否則沒有尾結點,那我們就要從頭開始找到尾,很麻煩啊。
鏈表合並其實很簡單,只要是兩個結點數據類型相同(不同也可以),把其中一個的結點的頭結點連接到另一個的尾結點就可以了。就是讓其中一個的尾結點的指針tail->next=head(另一個結點的頭結點)當然這是無序鏈表。如果是有序鏈表,比如結點數據時按照從大到小排列的,那首先就需要找到插入位置,讀取每一個結點的數據,然後比較。找到插入位置之後按照下圖進行的方式即可:
❻ 如何用c語言編合並兩個順序線性表的程序
1、一開始的思路:把A、B都丟進C里,然後對C排序。人們一開始想到的總是最懶的辦法,往往是最沒效率的。
改進:由於A、B是排好序的,先把A丟進C里,再拿B元素一個個往裡查找插入。這么做要頻繁移動元素,如果線性表不是鏈表的話,開銷很大。
再改進:從A、B中各拿一個元素出來,比較後把小的放進C里,再從剛才拿出元素的那個表裡再拿個元素出來,再比較,把小的放進C里,重復這樣的操作,直到A、B其中一個中的元素拿完為止,再把還有剩的元素全丟進C里。
2、常式:
#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);
}
❼ 合並排序c語言指針問題
intmerge_sort(char*a,char*b,char*c)
{
while(*a&&*b)
{
if(*a>*b)
*c++=*b++;
else
*c++=*a++;
}
if(*a==0)
a=b;
while(*a)
*c++=*a++;
return0;
}
❽ C語言怎麼合並兩個字元串
代碼:
char str1="123";
char str2="abc";
strcat(str1,str2);
printf("%s",str1);
例如:
#include <stdio.h>
#include <string.h>
main()
{
char strDes[N]= "kkkjdah", strSor[N]="sdasdaaa";
strcat(strSor,strDes);//鏈接
puts(strDes);
puts(strSor);
}
(8)c語言快速合並兩指針擴展閱讀:
字元串在存儲上類似字元數組,它每一位單個元素都是能提取的,字元串的零位是它的長度,如s[0]=10,這提供給我們很多方便,例如高精度運算時每一位都能轉化為數字存入數組。
通常以串的整體作為操作對象,如:在串中查找某個子串、求取一個子串、在串的某個位置上插入一個子串以及刪除一個子串等。兩個字元串相等的充要條件是:長度相等,並且各個對應位置上的字元都相等。設p、q是兩個串,求q在p中首次出現的位置的運算叫做模式匹配。串的兩種最基本的存儲方式是順序存儲方式和鏈接存儲方式。
❾ 求助各位大佬c語言不使用其他數組運用指針同時將兩個合並數組排序
代碼
#include<iostream>
#include<algorithm>
#include<iterator>
usingnamespacestd;
intarrayA[10]={1,3,5,7,9};
intarrayB[]={2,4,6,8,10};
constintsizeB=sizeofarrayB/sizeof*arrayB;
constintsizeA=sizeofarrayA/sizeof*arrayA-sizeB;
int*mergeArray(int*arrayA,intsizeA,int*arrayB,intsizeB)
{
if(arrayA==NULL||arrayB==NULL||sizeA<0||sizeB<0)
returnNULL;
intposA=sizeA-1;
intposB=sizeB-1;
while(posA>=0&&posB>=0)
{
if(arrayA[posA]<arrayB[posB])
{
arrayA[posA+posB+1]=arrayB[posB];
posB--;
}
else
{
arrayA[posA+posB+1]=arrayA[posA];
posA--;
}
(arrayA,arrayA+10,ostream_iterator<int>(cout,""));
system("pause");
}
returnarrayA;
}
voidmain()
{
int*result=mergeArray(arrayA,sizeA,arrayB,sizeB);
(result,result+10,ostream_iterator<int>(cout,""));
cout<<endl;
}