c语言程序设计程序结果输出题目,C语言程序设计题,请帮忙1、编写一程序,输入任一整数num,完成 爱问知识人...

/*********************************************************************

呵呵,代码来了,太长,只好把上面几个题的删了。

还有,其实每个链表以及相关的函数,最好有个专门的头文件和源文件,全都凑

在一起的做法很不好。

*********************************************************************/

#include

#include

#include

typedef struct INT_LIST

{

int i_numb;

INT_LIST* last;

INT_LIST* next;

}ILIST,*LIST_PTR;

LIST_PTR CreatList(int iMax);

LIST_PTR AddNumber(LIST_PTR listPtr,int iNumb);

void FreeList(LIST_PTR listPtr);

LIST_PTR GetTail(LIST_PTR listPtr);

void printList(LIST_PTR listPtr);

LIST_PTR CopeList(LIST_PTR newList,LIST_PTR oldList);

LIST_PTR CopeListBit(LIST_PTR newList,LIST_PTR oldList, int max);

LIST_PTR SetList(LIST_PTR listPtr,int iPos,int iNumb);

int GetData(LIST_PTR listPtr,int iPos);

int SameList(LIST_PTR list1,LIST_PTR list2);

int ListLong(LIST_PTR list1);

typedef struct LISTVECTOR

{

LIST_PTR list;

LISTVECTOR* last;

LISTVECTOR* next;

}LVECTOR,*VECTOR_PTR;

VECTOR_PTR GreatVector(int iMax);

VECTOR_PTR AddList(VECTOR_PTR vPtr,LIST_PTR lPtr);

void FreeVector(VECTOR_PTR vPtr);

VECTOR_PTR GetVTail(VECTOR_PTR vPtr);

void printVector(VECTOR_PTR vPtr);

int HaveSameList(VECTOR_PTR vPtr, LIST_PTR lPtr);

LIST_PTR GetBaseList(int iNumb,int* iMax);

LIST_PTR GetMinList(int iNumb,int iMax);

VECTOR_PTR DealLast(VECTOR_PTR vPtr, LIST_PTR lMaxPtr, LIST_PTR lMinPtr, int iPos, int iMaxPos);

VECTOR_PTR DealNext(VECTOR_PTR vPtr, LIST_PTR lMaxPtr, LIST_PTR lMinPtr, LIST_PTR lNewPtr, int iPos, int iMaxPos);

///

//

int main()

{

LIST_PTR basePtr=NULL;

VECTOR_PTR vectorPtr=NULL;

int iInput;

int iMaxNumb=0;

printf("please input a number ! : ");

scanf("%d",&iInput);

basePtr=GetBaseList(iInput,&iMaxNumb);

vectorPtr=AddList(vectorPtr,basePtr);

LIST_PTR maxPtr=NULL;

LIST_PTR minPtr=NULL;

for(int i=iMaxNumb; i>=1; i--)

{

maxPtr=CopeListBit(maxPtr,basePtr,i);

minPtr=GetMinList(iInput,i);

vectorPtr=DealLast(vectorPtr,maxPtr,minPtr,i,i);

FreeList(maxPtr);

maxPtr=NULL;

FreeList(minPtr);

minPtr=NULL;

}

VECTOR_PTR head=vectorPtr;

int iMax=0;

while(head->next)

{

head=head->next;

iMax++;

}

printVector(vectorPtr);

printf("\nT(n)=%d\n",iMax);

FreeVector(vectorPtr);

FreeList(basePtr);

return 0;

}

//

///

LIST_PTR CreatList(int iMax)

{

iMax= iMax ? iMax : 1;

LIST_PTR listPtr;

LIST_PTR tailPtr;

listPtr=(LIST_PTR) malloc(sizeof(ILIST));

listPtr->last=NULL;

listPtr->next=NULL;

listPtr->i_numb=0;

tailPtr=listPtr;

for(int i=2; inext=(LIST_PTR) malloc(sizeof(ILIST));

tailPtr->next->last=tailPtr;

tailPtr=tailPtr->next;

tailPtr->next=NULL;

tailPtr->i_numb=0;

}

return listPtr;

}

void FreeList(LIST_PTR listPtr)

{

if(!listPtr)

{

return;

}

while(listPtr->next)

{

listPtr=listPtr->next;

free(listPtr->last);

}

free(listPtr);

listPtr=NULL;

}

LIST_PTR AddNumber(LIST_PTR listPtr,int iNumb)

{

if(!listPtr)

{

listPtr=CreatList(1);

listPtr->i_numb=iNumb;

return listPtr;

}

LIST_PTR tailPtr=GetTail(listPtr);

tailPtr->next=(LIST_PTR) malloc(sizeof(ILIST));

tailPtr->next->last=tailPtr;

tailPtr=tailPtr->next;

tailPtr->next=NULL;

tailPtr->i_numb=iNumb;

return listPtr;

}

LIST_PTR GetTail(LIST_PTR listPtr)

{

if(!listPtr)

{

return NULL;

}

LIST_PTR tailPtr;

tailPtr=listPtr;

while(tailPtr->next)

{

tailPtr=tailPtr->next;

}

return tailPtr;

}

LIST_PTR CopeList(LIST_PTR newList,LIST_PTR oldList)

{

if(!oldList)

{

FreeList(newList);

newList=NULL;

return newList;

}

if(newList)

{

FreeList(newList);

}

LIST_PTR tailPtr=oldList;

while(tailPtr->next)

{

newList=AddNumber(newList,tailPtr->i_numb);

tailPtr=tailPtr->next;

}

return newList=AddNumber(newList,tailPtr->i_numb);

}

void printList(LIST_PTR listPtr)

{

if(!listPtr)

{

return;

}

LIST_PTR tailPtr=GetTail(listPtr);

printf("(");

while(tailPtr->last)

{

printf("%d,",tailPtr->i_numb);

tailPtr=tailPtr->last;

}

printf("%d)",tailPtr->i_numb);

}

VECTOR_PTR GreatVector(int iMax)

{

iMax= iMax ? iMax : 1;

VECTOR_PTR tailPtr;

VECTOR_PTR vPtr=(VECTOR_PTR) malloc(sizeof(LVECTOR));

vPtr->last=NULL;

vPtr->next=NULL;

vPtr->list=NULL;

tailPtr=vPtr;

for(int i=2; inext=(VECTOR_PTR) malloc(sizeof(LVECTOR));

tailPtr->next->last=tailPtr;

tailPtr=tailPtr->next;

tailPtr->next=NULL;

tailPtr->list=NULL;

}

return vPtr;

}

VECTOR_PTR AddList(VECTOR_PTR vPtr,LIST_PTR lPtr)

{

if(!vPtr)

{

vPtr=GreatVector(1);

CopeList(vPtr->list,lPtr);

}

VECTOR_PTR tailPtr=GetVTail(vPtr);

tailPtr->next=(VECTOR_PTR) malloc(sizeof(LVECTOR));

tailPtr->next->last=tailPtr;

tailPtr=tailPtr->next;

tailPtr->next=NULL;

tailPtr->list=NULL;

tailPtr->list=CopeList(tailPtr->list,lPtr);

return vPtr;

}

void FreeVector(VECTOR_PTR vPtr)

{

if(!vPtr)

{

return;

}

while(vPtr->next)

{

vPtr=vPtr->next;

FreeList(vPtr->last->list);

free(vPtr->last);

}

FreeList(vPtr->list);

free(vPtr);

vPtr=NULL;

}

VECTOR_PTR GetVTail(VECTOR_PTR vPtr)

{

if(!vPtr)

{

return NULL;

}

VECTOR_PTR tailPtr=vPtr;

while(tailPtr->next)

{

tailPtr=tailPtr->next;

}

return tailPtr;

}

void printVector(VECTOR_PTR vPtr)

{

if(!vPtr)

{

return;

}

VECTOR_PTR tailPtr=vPtr;

int i=0;

int length=0;

while(tailPtr->next)

{

printList(tailPtr->list);

tailPtr=tailPtr->next;

if(!(i++%3))

{

printf("\n");

}

else

{

printf("\t\t");

}

}

printList(tailPtr->list);

}

LIST_PTR GetBaseList(int iNumb,int* iMax)

{

iNumb= iNumb ? iNumb : 1;

*iMax=1;

LIST_PTR baseList=NULL;

baseList=AddNumber(baseList,iNumb);

if(1==iNumb)

{

return baseList;

}

int numb=(int) sqrt(iNumb);

while(numb>1)

{

baseList=AddNumber(baseList,numb);

numb=(int) sqrt(numb);

*iMax=*iMax+1;

}

*iMax=*iMax+1;

return baseList=AddNumber(baseList,numb);

}

LIST_PTR GetMinList(int iNumb,int iMax)

{

LIST_PTR minList=NULL;

iMax= iMax ? iMax : 1;

minList=CreatList(iMax);

minList=SetList(minList,1,iNumb);

int lastNumb=2;

int count=iMax;

switch(iMax)

{

case 1:

break;

case 2:

minList=SetList(minList,2,1);

break;

default:

minList=SetList(minList,count--,1);

while(1next)

{

newData=newData->next;

}

else

{

return listPtr;

}

}

newData->i_numb=iNumb;

return listPtr;

}

int GetData(LIST_PTR listPtr,int iPos)

{

if(!listPtr || !iPos)

{

return -1;

}

LIST_PTR dataPtr=listPtr;

for(int i=2; inext)

{

dataPtr=dataPtr->next;

}

else

{

return -1;

}

}

return dataPtr->i_numb;

}

VECTOR_PTR DealLast(VECTOR_PTR vPtr, LIST_PTR lMaxPtr, LIST_PTR lMinPtr, int iPos, int iMaxPos)

{

if(iPos=minNumb)

{

newPtr=NULL;

newPtr=CopeList(newPtr,lMaxPtr);

newPtr=SetList(newPtr,iPos,iNumber);

if(iPos=minNumb)

{

lNewPtr=SetList(lNewPtr,iPos,iNumber);

if(iPosnext)

{

break;

}

newList=AddNumber(newList,tailPtr->i_numb);

tailPtr=tailPtr->next;

}

return newList=AddNumber(newList,tailPtr->i_numb);

}

int SameList(LIST_PTR list1,LIST_PTR list2)

{

if(!list1||!list2)

{

return 0;

}

int max;

if((max=ListLong(list1))!=ListLong(list2))

{

return 0;

}

LIST_PTR tail1=list1;

LIST_PTR tail2=list2;

for(int i=1; ii_numb != tail2->i_numb)

{

return 0;

}

tail1=tail1->next;

tail2=tail2->next;

}

return 1;

}

int ListLong(LIST_PTR list1)

{

LIST_PTR tail=list1;

int i=0;

while(tail)

{

tail=tail->next;

i++;

}

return i;

}

int HaveSameList(VECTOR_PTR vPtr, LIST_PTR lPtr)

{

VECTOR_PTR tailV=vPtr;

while(tailV)

{

if(SameList(tailV->list,lPtr))

{

return 1;

}

tailV=tailV->next;

}

return 0;

}

/*

修改一下,把引用换成指针

*/

全部

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值