c語言線性合併,兩個線性表合併c語言

本文目錄一覽:

數據結構C語言版,順序線性表的合併程序。最好有注釋

//希望我的回答對你的學習有幫助

#include stdlib.h

/*順序表存儲空間長度的最小值*/

#define LISTMINSIZE 10

/*順序表存儲結構類型定義*/

typedef struct

{

               ListDT*base;       /*順序表空間基地址*/

               intlistsize;            /*順序表空間尺寸*/

               intlen;                  /*順序表長度*/

}SeqList;

 

/*順序表初始化*/

void ListInitialize(SeqList *pL, int size)

{

               if(sizeLISTMINSIZE)

                               size=LISTMINSIZE;           /*限定不能小於最小尺寸*/

               pL-listsize=size;

               pL-base=(ListDT*)malloc(pL-listsize*sizeof(ListDT));

               if(!pL-base)

                               exit(EXIT_FAILURE);

               pL-len=0;                                                        /*初始化空表*/

}

 

/*按給定的下標取順序表元素值*/

BOOL ListElem(SeqList L, int index, ListDT *pelem)

{

               BOOLflg=TRUE;

               if(index0|| indexL.len-1 )

                               flg=FALSE;                                        /*參數越界*/

               else

                               *pelem=L.base[index];

               returnflg;

}

 

/*求順序表長度*/

int ListLen(SeqList L)

{

               returnL.len; 

}

 

/*在順序表中指定序號位置插入元素*/

BOOL ListInsert(SeqList *pL, int pos, ListDT d)

{

               BOOLflg=TRUE;

               inti;

               if(pos0|| pL-len=pL-listsize || pospL-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;

}

 

/*把順序表中指定序號的元素刪除*/

BOOL ListDel(SeqList *pL, int pos)

{

               BOOLflg=TRUE;

               inti;

               if(pos0|| pos=pL-len)

                               flg=FALSE;

               else

               {

                               for(i=pos+1;ipL-len; i++)                            /*移動數據*/

                                              pL-base[i-1]=pL-base[i];

                               pL-len–;                                                           /*表長增1*/

               }

               returnflg;

}

 

/*在順序表中查找元素*/

int ListLoc(SeqList L, ListDT d,BOOL (*equal)(ListDT,ListDT))

{

               intpos=L.len-1;

               while(pos=0 !(*equal)(L.base[pos],d))

                               pos–;

               returnpos;

}

 

/*取前導元素序號位置*/

BOOL ListPrior(SeqList L, int pos, int *ppriorpos)

{

               BOOLflg=TRUE;

               if(pos0 posL.len)

                               *ppriorpos=pos-1;

               else

                               flg=FALSE;

               returnflg;

}

 

/*取後繼元素序號位置*/

BOOL ListNext(SeqList L, int pos, int *pnextpos)

{

               BOOLflg=TRUE;

               if(pos=0 posL.len-1)

                               *pnextpos=pos+1;

               else

                               flg=FALSE;

               returnflg;

}

 

/*銷毀順序表*/

void ListDestroy(SeqList L)

{

               free(L.base);

}

 

#endif

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/

 

/*

建議性測試用程序

*/

typedef enum {TRUE=1,FALSE=0} BOOL;

typedef int ListDT;

#include “seqlist.c”

void printSeqList(SeqList L)

{

               inti;

               ListDTx;

               printf(“\nList:\n”);

               for(i=0;iListLen(L); i++)

               {

                               ListElem(L,i,x);

                               printf(“%3d”,x);

               }

}

 

BOOL dataequal(int x, int y)

{

               return(x==y)? TRUE:FALSE;

}

 

#define N 5

void main()

{

               inti,prior,next;

               ListDTx,test[N]={10,20,30,40,50};

               SeqListL;

               /*初始化順序表*/

               ListInitialize(L,N);

               /*在表頭插入N個元素*/

               for(i=0;iN; i++)

                               ListInsert(L,0,test[i]);

               printSeqList(L);

               /*刪除元素*/

               ListDel(L,N/2);

               printSeqList(L);

               printf(“\ninputa key:\n”);

               scanf(“%d”,x);

               /*查找x在表中位置*/

               i=ListLoc(L,x,dataequal);

               /*求x的前導元素*/

               if(ListPrior(L,i,prior))

               {

                               ListElem(L,prior,x);

                               printf(“Prior:%d\n”,x);

               }

               else

                               printf(“noPrior.\n”);

               /*求x的後繼*/

               if(ListNext(L,i,next))

               {

                               ListElem(L,next,x);

                               printf(“Next:%d\n”,x);

               }

               else

                               printf(“noNext.\n”);

               /*求表長*/

               printf(“Listlength=%d”,ListLen(L));

               /*銷毀順序表*/

               ListDestroy(L);

}

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;

在此基礎上,

也可以寫出鏈表的算法

如何用C語言把兩個有序線性列表合併成一個有序線性鏈表(不超過10行的程序)

#includestdio.h

#include malloc.h

#includelimits.h

#define MAX 1024

void merge(int a[],int p,int q,int b[],int r,int s,int c[])

{int i,j,n1,n2,n,k,m;

n1=q-p+1;

n2=s-r+1;

int *l=(int *)malloc(sizeof(int)*(n1+1));

for(i=0;in1;i++)

l[i]=a[p+i-1];

int *t=(int *)malloc(sizeof(int)*(n2+1)); for(j=0;jn2;j++)

t[j]=b[r+j-1];

l[n1]=INT_MAX;t[n2]=INT_MAX;

i=0;

j=0;

for(k=0;kn1+n2;k++)

{if(l[i]t[j]){c[k]=l[i];

i++;}

else {c[k]=t[j];

j++;}}

for(i=0;in1+n2;i++)

printf(“%d “,c[i]);

printf(“\n”);

}

int main()

{

int i;

int arr[] = {4,5,9,1000,1001};

int arr2[] = {1,7,8,999,1003,1005};

int *res = (int*)malloc(sizeof(int) * 100);

merge(arr,1,5,arr2,1,6,res);

return 0;

}

求C語言程序代碼,合併線性表

#includestdio.h

#includestdlib.h

#define MAXSIZE 110

typedef struct 

{

    int elem[MAXSIZE];

    int len;

}sqlist;

void merge(sqlist *la,sqlist *lb,sqlist *lc)

{

    int i,j,k;

    i=j=k=0;

    if(la-len+lb-len=MAXSIZE)

    {    

        while(ila-lenjlb-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(ila-len)

        {

            lc-elem[k]=la-elem[i];

            i++;

            k++;

        }

        while(jlb-len)

        {

            lc-elem[k]=lb-elem[j];

            j++;

            k++;

        }  

        lc-len=la-len+lb-len;

   }

       else printf(“out of bound”);

}

void print(sqlist *l)

{

    int i;

    for(i=0;il-len;i++)

    {

        printf(“%d “,l-elem[i]);             

    }

printf(“\n”);

}

int main(void)

{

    int i;

    sqlist la;

    sqlist lb;

    sqlist lc;

printf(“輸入線性表LA的元素個數:”);

scanf(“%d”,la.len);

printf(“輸入線性表LA的%d個元素:”,la.len);

for(i=0;ila.len;i++)

scanf(“%d”,la.elem[i]);

printf(“輸入線性表LB的元素個數:”);

scanf(“%d”,lb.len);

printf(“輸入線性表LB的%d個元素:”,lb.len);

for(i=0;ilb.len;i++)

scanf(“%d”,lb.elem[i]);

    merge(la,lb,lc);

    print(lc);

    system(“pause”);

    return(0);

}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/206838.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-08 14:18
下一篇 2024-12-08 14:18

相關推薦

  • 利用Python實現兩個鏈表合併為一個有序鏈表

    對於開發工程師來說,實現兩個鏈表合併為一個有序鏈表是必須掌握的技能之一。Python語言在鏈表處理上非常便利,本文將從多個方面詳細闡述如何利用Python實現兩個鏈表合併為一個有序…

    編程 2025-04-29
  • AES加密解密算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演着非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29
  • Python按位運算符和C語言

    本文將從多個方面詳細闡述Python按位運算符和C語言的相關內容,並給出相應的代碼示例。 一、概述 Python是一種動態的、面向對象的編程語言,其按位運算符是用於按位操作的運算符…

    編程 2025-04-29
  • Python定義兩個列表的多面探索

    Python是一種強大的編程語言,開放源代碼,易於學習和使用。通過Python語言,我們可以定義各種數據類型,如列表(list)。在Python中,列表(list)在處理數據方面起…

    編程 2025-04-29
  • Python實現一元線性回歸模型

    本文將從多個方面詳細闡述Python實現一元線性回歸模型的代碼。如果你對線性回歸模型有一些了解,對Python語言也有所掌握,那麼本文將對你有所幫助。在開始介紹具體代碼前,讓我們先…

    編程 2025-04-29
  • Python語言由荷蘭人為中心的全能編程開發工程師

    Python語言是一種高級語言,很多編程開發工程師都喜歡使用Python語言進行開發。Python語言的創始人是荷蘭人Guido van Rossum,他在1989年聖誕節期間開始…

    編程 2025-04-28
  • Python語言設計基礎第2版PDF

    Python語言設計基礎第2版PDF是一本介紹Python編程語言的經典教材。本篇文章將從多個方面對該教材進行詳細的闡述和介紹。 一、基礎知識 本教材中介紹了Python編程語言的…

    編程 2025-04-28

發表回復

登錄後才能評論