数据结构c语言版一道题求解

数据结构c语言版一道题求解。急。
要求:以下是顺序表的结构体定义及部分代码,请根据提示信息将代码补充完整,并编写主函数实现以下功能:已知两个非递减有序顺序表LA={1,1,3,3,4,6},LB={2,3,5,7,9},将LA和LB的数据合并到新表LC中,仍然保持非递减的顺序关系,并输出表LC的内容。

typedef int DataType;

struct SeqList
{ int MAXNUM; /*顺序表中最大元素的个数*/
int n; /* 存放线性表中元素的个数n≤MAXNUM */
DataType *element; /* element[0],element[1],…,element[n - 1]存放线性表中的元素 */
};

typedef structSeqList *PSeqList;

PSeqList createNullList_seq(intm ) {
/* 创建新的顺序表 */
PSeqList palist= (PSeqList)malloc(sizeof(struct SeqList));
if (palist!=NULL){
palist->element= (DataType*)malloc(sizeof(DataType)*m);
if(palist->element){
palist->MAXNUM=m;
palist->n = 0; /*空表长度为0 */
return (palist);
}
else free (palist);
}
printf(“Outof space!!\n”); /* 存储分配失败*/
return NULL;
}

int isNullList_seq( PSeqList palist ) {
/*判别palist所指顺序表是否为空表。*/

}

int locate_seq( PSeqList palist, DataType x ) {
/* 求x在palist所指顺序表中的下标*/

}

int insertPre_seq( PSeqListpalist, int p, DataType x )
/* 在palist所指顺序表中下标为p的元素之前插入元素x*/
{

}

int deleteP_seq( PSeqList palist, int p )
/* 在palist所指顺序表中删除下标为p的元素*/
{

}

完整代码:

#include <stdio.h>
#include <stdlib.h>
typedef int DataType;
 
struct SeqList
{  int   MAXNUM;       /* 顺序表中最大元素的个数*/
   int        n;      /* 存放线性表中元素的个数n≤MAXNUM  */
   DataType *element; /* element[0],element[1],…,element[n - 1]存放线性表中的元素 */
};
 
typedef  struct SeqList   *PSeqList;

PSeqList createNullList_seq(int m ) {
/* 创建新的顺序表 */
    PSeqList palist= (PSeqList)malloc(sizeof(struct SeqList));
     if (palist!=NULL){
     palist->element= (DataType*)malloc(sizeof(DataType)*m);
       if(palist->element){
       palist->MAXNUM=m;
       palist->n = 0;                                 /*空表长度为0 */
       return (palist);
      }
   else free (palist);
    }
    printf("Outof space!!\n");      /* 存储分配失败*/
    return NULL;
}

int  isNullList_seq( PSeqList palist ) {
/*判别palist所指顺序表是否为空表。*/
if((palist == NULL) || (palist->n == 0)) {
return 1;
}
return 0;
}

int  locate_seq( PSeqList palist, DataType x ) {
/* 求x在palist所指顺序表中的下标*/
int i, ret = -1;
if(palist == NULL) return ret;
ret = palist->n;
for(i=0; i<palist->n; ++i) {
if(palist->element[i] >= x) {
ret = i;
break;
}
}
return ret;
}

int insertPre_seq(PSeqList palist, int p, DataType x)
/* 在palist所指顺序表中下标为p的元素之前插入元素x*/
{
int i,ret = -1;
if(palist == NULL || palist->n >= palist->MAXNUM) return ret;
if(p>=palist->n) {
palist->element[palist->n] = x;
ret = palist->n;
++palist->n;
}
else {
for(i=palist->n; i>p; --i) {
palist->element[i] = palist->element[i-1];
}
palist->element[i] = x;
ret = i;
++palist->n;
}
return ret;
}

int  deleteP_seq( PSeqList palist, int p )
/* 在palist所指顺序表中删除下标为p的元素*/
{
int i;
if(isNullList_seq(palist) || p>=palist->n) return -1;
for(i=p-1; i<palist->n-1; ++i) {
palist->element[i] = palist->element[i+1];
}
--palist->n;
return 1;
}

void print(PSeqList palist) {
int i;
if(isNullList_seq(palist)) return;
for(i = 0; i<palist->n; ++i) {
printf("%d\t", palist->element[i]);
}
if(palist->n > 0)  printf("\n");
}
/*
LA={1,1,3,3,4,6},LB={2,3,5,7,9},
*/

int main() {
int i;
PSeqList LA, LB,LC;
int a[]={1,1,3,3,4,6}, b[] = {2,3,5,7,9};
LA = createNullList_seq(6);
LB = createNullList_seq(5);
for(i=0;i<6;++i) {
insertPre_seq(LA, i, a[i]);
}
print(LA);
for(i=0;i<5;++i) {
insertPre_seq(LB, i, b[i]);
}
print(LB);
LC = createNullList_seq(LA->MAXNUM + LB->MAXNUM);
for(i=0;i<LA->n;++i) {
insertPre_seq(LC, i, LA->element[i]);
}
for(i=0;i<LB->n;++i) {
int p = locate_seq(LC, LB->element[i]);
insertPre_seq(LC, p, LB->element[i]);
}
print(LC);
return 0;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-09-28
正在学,做是做出来的,不过不在这个电脑里存着。不然就复制给你了。追问

......要下课了。。。。做不出来。。。。

第2个回答  2013-09-28
struct SeqList
{ int MAXNUM; /*顺序表中最大元素的个数*/
int n; /* 存放线性表中元素的个数n≤MAXNUM */
DataType *element; /* element[0],element[1],…,element[n - 1]存放线性表中的元素 */
};

typedef struct SeqList *PSeqList;

PSeqList createNullList_seq(int m ) {
/* 创建新的顺序表 */
PSeqList palist= (PSeqList)malloc(sizeof(struct SeqList));
if (palist!=NULL){
palist->element= (DataType*)malloc(sizeof(DataType)*m);
if(palist->element){
palist->MAXNUM=m;
palist->n = 0; /*空表长度为0 */
return (palist);
}
else free(palist);
}
printf(“Out of space!!\n”); /* 存储分配失败*/
return NULL;
}

int isNullList_seq( PSeqList palist ) {
/*判别palist所指顺序表是否为空表。*/
return palist->n==0?1:0;
}

int locate_seq( PSeqList palist, DataType x ) {
/* 求x在palist所指顺序表中的下标*/
for(int i=0;i<n;i++)
{
if(palist->element[i]==x){
return i;
}
}
return -1;
}

int insertPre_seq( PSeqListpalist, int p, DataType x )
/* 在palist所指顺序表中下标为p的元素之前插入元素x*/
{
for(int i=n-1;i>q;i--)
{
palist->element[i+1]=palist->element[i];
}
palist->element[q]=x;
return 1;
}

int deleteP_seq( PSeqList palist, int p )
/* 在palist所指顺序表中删除下标为p的元素*/
{
for(int i=q;i<n;i++)
{
palist->element[i]=palist->element[i+1];
}
return 1;
}
相似回答