永发信息网

数据结构线性表编程

答案:1  悬赏:0  手机版
解决时间 2021-05-17 23:30
  • 提问者网友:鼻尖触碰
  • 2021-05-17 06:23

谁能提供以下问题的源代码,本人很急,谢谢了

(1)求一个带头结点的单链表值为x的结点个数

(2)判断一个不带头结点的单链表是否是递增的

(3)删除一个不带头结点的单链表中值相同的多余结点

(4)往一个有序单链表中插入一个值让其仍然有序

(5)求两个有序表A、B的交集

(6) 求两个多项式A、B的和(使用单链表)

最佳答案
  • 五星知识达人网友:雪起风沙痕
  • 2021-05-17 06:56

1. 线性表的静态顺序存储结构描述


typedef char ElemType;


struct lsqstr


{


ElemType elem[N];


int length;


};


typedef struct lsqstr SSqList;



2. 线性表的7个基本操作算法



void InitList ( SSqList &L )


{ //构造一个空的线性表


L.length=0; //空表长度为0


}



int ListInsert ( SSqList & L,int i,ElemType e )


{ //在L中第i个位置之前插入新的数据元素e,L的长度加1


if ( i<1|| i> L.length +1) return ERROR;


if (L .length==N) return OVERFLOW;


for(j=L.length;j>=i;j--) L.elem[j]=L.elem[j-1];


L.elem[i-1]=e;


L.length=L.length+1;


return OK;


}



int ListDelete ( SSqList & L,int i,ElemType &e )


{ //删除L的第i个数据元素,并用e返回其值,L的长度减1


if (L.length==0) return UNDERFLOW;


if ( i<1|| i> L.length) return ERROR;


e=L.elem[i-1];


for(j=i+1;j<= L.length;j++) L.elem[j-2]=L.elem[j-1];


L.length=L.length-1;


return OK;


}



int ListLength ( SSqList L )


{//返回线性表 L 中元素的个数


return L.length;


}



int ListEmpty ( SSqList L )


{ //若 L 为空表,则返回 TRUE,否则返回 FALSE


if(L.length==0)return TRUE;else return FALSE;


}



int LocateElem (SSqList L, ElemType e, int (*compare)( ElemType,ElemType))


{ //返回 L 中第1个与 e 满足关系 compare( ) 的元素的位序。若这


//样的元素不存在,则返回值为0


i=1;


while(i<=L.length && !(*compare)(L.elem[i-1],e))i++;


if(i<=L.length)return i; else return 0;


}



int GetElem(SSqList L,int i,ElemType &e)


{//用e返回L中的第i个元素的值


if(L.length==0)return UNDERFLOW;


if(i<1 ||i>L.length)return ERROR;


e=L.elem[i-1];


return OK;


}



int equal( ElemType e1, ElemType e2)


{ //若e1等于e2,则返回1;否则返回0


return e1==e2?1:0;


}



3. 线性表的创建算法


void createlist(SSqList & L)


{ //构造并输入线性表L


int n,i,L_len,f;char c;


InitList(L);


printf("input element number :n=");


scanf("%d",&n);


fflush(stdin);


printf("\n");


printf("input %d char :\n",n);


L_len= ListLength(L);


for(i=1;i<=n;i++)


{


scanf("%c",&c);


f=ListInsert ( L, ++L_len , c );


if(f!=1){printf("OVERFLOW!\n");fflush(stdin);break;}


}


}



4. 线性表的输出算法


void outputlist (SSqList L)


{ //输出线性表L


int L_len,i;ElemType e;


L_len=ListLength(L);


printf("list length:%d\n",L_len);


if(L_len)


{


printf("list element:\n");


for(i=1;i<=L_len;i++)


{


GetElem (L,i,e);


printf("%c,",e);


}


printf("\n");


}


}



5. 求集合并集的算法


void union1(SSqList &LA,SSqList &LB)


{


// 将所有在线性表LB中但不在LA中的数据元素插入到 LA 中,


// 算法执行之后,线性表 LB 不再存在。


int La_len,f; ElemType e;


La_len = ListLength(LA);// 求得线性表 LA 的长度


while (!ListEmpty(LB)) // 依次处理 LB 中元素直至 LB 为空表止


{


ListDelete(LB,1,e); //从 LB 中删除第1个数据元素并赋给 e


if (!LocateElem(LA,e,equal))


{


f=ListInsert(LA,++La_len,e);


if(f!=1) {printf("OVERFLOW!\n"); fflush(stdin); break; }


}// 当LA中不存在和 e 值相同的数据元素时进行插入







outputlist






createlist






InitList






ListLength






union1






ListInsert






GetElem






equal






LocateElem






ListEmpty






ListDelete






main






图2 各算法之间的调用关系

} // while  


} // union1



6. 主程序算法


void main ( )


{


createlist(LA); //创建LA


createlist(LB); //创建LB


outputlist(LA); //输出LA


outputlist(LB); //输出LB


union1(LA,LB); //启动union


outputlist(LA); //输出LA


}


我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯