数据结构C语言版,顺序线性表的合并程序。最好有注释

 我来答
防御333
2015-04-22 · TA获得超过5892个赞
知道大有可为答主
回答量:2348
采纳率:85%
帮助的人:2021万
展开全部
//希望我的回答对你的学习有帮助
#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-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(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;
}
 
/*在顺序表中查找元素*/
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=0;i<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=0;i<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);
}
xoaxa
2015-04-22 · TA获得超过8610个赞
知道大有可为答主
回答量:6415
采纳率:72%
帮助的人:3470万
展开全部
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

typedef int ElemType;
const int MAXSIZE = 100;
typedef struct sqlist {
ElemType data[MAXSIZE];
int size;
}*SqList;

SqList GetEmptyList() {
SqList list = (struct sqlist *)malloc(sizeof(struct sqlist));
list->size = 0;
return list;
}

int AddElem(SqList list, ElemType x) {
int i,j;
if(list->size >= MAXSIZE) return 0;
for(i = 0; i < list->size; ++i) {
if(list->data[i] == x) return 0; // 不含等大小的元素
if(list->data[i] > x) {
for(j = list->size; j > i; --j)
list->data[j] = list->data[j - 1];
list->data[i] = x;
++list->size;
return 1;
}
}
list->data[list->size] = x;
++list->size;
return 1;
}

void ShowList(SqList list) {
int i,cnt = 0;
for(i = 0; i < list->size; ++i) {
if(i && i % 20 == 0) printf("\n"); // 每行显示20个元素
printf("%5d",list->data[i]);
}
printf("\n");
if(i % 20) printf("\n");
}

SqList MergeList(SqList La, SqList Lb) {
SqList Lc = GetEmptyList();
int i;
for(i = 0; i < La->size; ++i) // 先将La添加到Lc中
AddElem(Lc,La->data[i]);
for(i = 0; i < Lb->size; ++i) // 再将Lb添加到Lc中
AddElem(Lc,Lb->data[i]);
return Lc;
}

int main() {
SqList LA = GetEmptyList();
SqList LB = GetEmptyList();
SqList LC;
int i,N = 20;
srand((unsigned)time(NULL));
for(i = 0; i < N; ++i) {
AddElem(LA,rand()%100);
AddElem(LB,rand()%100);
}
LC = MergeList(LA,LB);
printf("LA:\n");
ShowList(LA);
printf("LB:\n");
ShowList(LB);
printf("LC:\n");
ShowList(LC);
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
风若远去何人留
2015-04-22 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450127
专业C/C++软件开发

向TA提问 私信TA
展开全部
#include <stdio.h>
typedef struct
{
int n;
int a[100];
}T;

void join(T a, T b, T *c)
{
int i, j;
c->n = 0;
for(i = 0; i < a.n && j < b.n; )
{
if(a.a[i] < b.a[j])
c->a[c->n++] = a.a[i++];
else 
c->a[c->n++] = b.a[j++];
}
for(;i<a.n; )
c->a[c->n++] = a.a[i++];
for(;j<b.n; )
c->a[c->n++] = b.a[j++];
}
int main()
{
T a = {5, {1, 3, 5, 7, 9}};
T b = {5, {2, 4, 6, 8, 10}};
T c;
int i;

join(a, b, &c);
for(i = 0; i < c.n; i ++)
printf("%d ", c.a[i]);
printf("\n");

}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式