谁能提供以下问题的源代码,本人很急,谢谢了
(1)求一个带头结点的单链表值为x的结点个数
(2)判断一个不带头结点的单链表是否是递增的
(3)删除一个不带头结点的单链表中值相同的多余结点
(4)往一个有序单链表中插入一个值让其仍然有序
(5)求两个有序表A、B的交集
(6) 求两个多项式A、B的和(使用单链表)
谁能提供以下问题的源代码,本人很急,谢谢了
(1)求一个带头结点的单链表值为x的结点个数
(2)判断一个不带头结点的单链表是否是递增的
(3)删除一个不带头结点的单链表中值相同的多余结点
(4)往一个有序单链表中插入一个值让其仍然有序
(5)求两个有序表A、B的交集
(6) 求两个多项式A、B的和(使用单链表)
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 各算法之间的调用关系 |
} // union1
6. 主程序算法
void main ( )
{
createlist(LA); //创建LA
createlist(LB); //创建LB
outputlist(LA); //输出LA
outputlist(LB); //输出LB
union1(LA,LB); //启动union
outputlist(LA); //输出LA
}