求C语言程序代码,合并线性表

求C语言程序代码,合并线性表,第1张

#include<stdio.h>

#include<stdlib.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(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

   }

       else printf("out of bound")

}

void print(sqlist *l)

{

    int i

    for(i=0i<l->leni++)

    {

        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=0i<la.leni++)

scanf("%d",&la.elem[i])

printf("输入线性表LB的元素个数:")

scanf("%d",&lb.len)

printf("输入线性表LB的%d个元素:",lb.len)

for(i=0i<lb.leni++)

scanf("%d",&lb.elem[i])

    merge(&la,&lb,&lc)

    print(&lc)

    system("pause")

    return(0)

}

//希望我的回答对你的学习有帮助

#include <stdlib.h>

/*顺序表存储空间长度的最小值*/

#define LISTMINSIZE 10

/*顺序表存储结构类型定义*/

typedef struct

{

               ListDT*base       /*顺序表空间基地址*/

               intlistsize            /*顺序表空间尺寸*/

               intlen                  /*顺序表长度*/

}SeqList

 

/*顺序表初始化*/

void ListInitialize(SeqList *pL, int size)

{

               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                                                        /*初始化空表*/

}

 

/*按给定的下标取顺序表元素值*/

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

{

               BOOLflg=TRUE

               if(index<0|| index>L.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(pos<0|| pL->len>=pL->listsize || pos>pL->len)

                               flg=FALSE

               else

               {

                               for(i=pL->len-1i>=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(pos<0|| pos>=pL->len)

                               flg=FALSE

               else

               {

                               for(i=pos+1i<pL->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(pos>0&& pos<L.len)

                               *ppriorpos=pos-1

               else

                               flg=FALSE

               returnflg

}

 

/*取后继元素序号位置*/

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

{

               BOOLflg=TRUE

               if(pos>=0&& pos<L.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=0i<ListLen(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=0i<N 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)

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/yw/11590883.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存