#include "stdlib。h"
#include "stdio。h"
struct listNode{
int data;
struct listNode *nextPtr;
};
typedef struct listNode LISTNODE;
typedef LISTNODE * LISTNODEPTR;
/*LISTNODEPTR£ºÖ¸ÏòLISTNODEÖ¸Õë*/
LISTNODE * createFIFOList1();
LISTNODEPTR createFILOList();
void createFIFOList2(LISTNODEPTR *);
void printList(LISTNODEPTR );
void destroyList(LISTNODEPTR);
LISTNODEPTR find(LISTNODEPTR currentPtr, int value);
void insertNode(LISTNODEPTR *sPtr,int value);
LISTNODEPTR createSortList();
int deleteNode(LISTNODEPTR *sPtr, int value);
void printListR(LISTNODEPTR currentPtr);
void printListS(LISTNODEPTR currentPtr);
LISTNODEPTR findMax(LISTNODEPTR headPtr);
LISTNODEPTR findMaxR(LISTNODEPTR headPtr);
LISTNODEPTR reverseList(LISTNODEPTR headPtr);
LISTNODEPTR reverseList2(LISTNODEPTR headPtr);
LISTNODEPTR reverseList3(LISTNODEPTR headPtr);
void findPos(LISTNODEPTR headPtr,int value,LISTNODEPTR * previousPtr,LISTNODEPTR * currentPtr);
LISTNODEPTR mergeSortList(LISTNODEPTR head1Ptr,LISTNODEPTR head2Ptr);
main()
{
LISTNODEPTR headPTR = NULL;
int data;
LISTNODEPTR point;
int type;
int result;
// headPTR = createFIFOList1();
// createFIFOList2(&headPTR);
// printList(headPTR);
headPTR = createSortList();
printList(headPTR);
/*
printf("ÇëÊäÈëÒª·þÎñµÄÖÖÀࣺ0, ´òÓ¡£¬1 ²éÕÒ£¬2 ²åÈ룬3 ɾ³ý£¬4 ÄæÐò´òÓ¡, 5 ÕÒ×î´óÊý, 6 ÄæתÁ´±í£¬7 Á´±í¹é²¢£¬-1½áÊø£º
");
scanf("%d", &type);
while(type != -1)
{
switch(type)
{
case 0:
{
printListS(headPTR);
break;
}
case 4:
{
printListR(headPTR);
break;
}
case 1:
{
printf("ÇëÊäÈëÒª²éÕÒµÄÊý¾Ý£º");
scanf("%d", &data);
if(point = find(headPTR, data))
printf("%d
", point->data);
else
printf("ûÓÐÕÒµ½
");
break;
}
case 2:
{
printf("ÇëÊäÈëÒª²åÈëµÄÊý¾Ý£º");
scanf("%d", &data);
insertNode(&headPTR, data);
break;
}
case 3:
{
printf("ÇëÊäÈëҪɾ³ýµÄÊý¾Ý£º");
scanf("%d", &data);
result = deleteNode(&headPTR, data);
printf("ɾ³ýµÄ½á¹ûΪ£º%d
", result);
break;
}
case 5:
{
LISTNODEPTR resultPtr = findMax(headPTR);
printf("×î´óֵΪ£º%d
", resultPtr->data);
break;
}
case 6:
{
LISTNODEPTR resultPtr = reverseList2(headPTR);
printListS(resultPtr);
break;
}
case 7:
{
LISTNODEPTR headPtr2 = createSortList();
printList(headPtr2);
headPTR = mergeSortList(headPTR, headPtr2);
printList(headPTR);
break;
}
}
printf("
ÇëÊäÈëÒª·þÎñµÄÖÖÀࣺ0, ´òÓ¡£¬1 ²éÕÒ£¬2 ²åÈ룬3ɾ³ý£¬4ÄæÐò´òÓ¡£¬5 ÕÒ×î´óÊý£¬6 ÄæתÁ´±í£¬7 Á´±í¹é²¢£¬ -1½áÊø£º
");
scanf("%d", &type);
}
destroyList(headPTR);
*/
system("pause");
}
LISTNODE * createFIFOList1()
{
int num;
LISTNODEPTR headPtr=NULL,lastPtr=NULL,currentPtr=NULL;
printf("input positive numbers,-1 to end
");
scanf("%d",&num);
while(num!=-1)
{
currentPtr=malloc(sizeof(LISTNODE)); /*·ÖÅä½áµãÄÚ´æ*/
if(currentPtr!=NULL)
{/*²åÈë½áµã*/
currentPtr->data=num;
currentPtr->nextPtr = NULL;
if(headPtr==NULL)
{ /*ÈôcurrentPtrÊÇÍ·½áµã*/
headPtr=currentPtr;
lastPtr=currentPtr;
}
else
{
lastPtr->nextPtr=currentPtr; /*½«½áµãÁ¬ÉÏÁ´±íβ½áµã*/
lastPtr=currentPtr; /*ʹlastPtrÖ¸Ïòµ±Ç°Á´±íµÄ×îºóÒ»¸ö½áµã*/
}
}
scanf("%d",&num);
}
// lastPtr->nextPtr=NULL;/*ÉèÖÃÁ´±í½áÊø±ê¼Ç*/
return headPtr;
}
void createFIFOList2(LISTNODEPTR *sPTR)
{
int num;
LISTNODEPTR headPtr=NULL,lastPtr=NULL,currentPtr=NULL;
printf("input positive numbers,-1 to end
");
scanf("%d",&num);
while(num!=-1)
{
currentPtr=malloc(sizeof(LISTNODE)); /*·ÖÅä½áµãÄÚ´æ*/
if(currentPtr!=NULL)
{/*²åÈë½áµã*/
currentPtr->data=num;
if(headPtr==NULL)
{ /*ÈôcurrentPtrÊÇÍ·½áµã*/
headPtr=currentPtr;
lastPtr=currentPtr;
}
else
{
lastPtr->nextPtr=currentPtr; /*½«½áµãÁ¬ÉÏÁ´±íβ½áµã*/
lastPtr=currentPtr; /*ʹlastPtrÖ¸Ïòµ±Ç°Á´±íµÄ×îºóÒ»¸ö½áµã*/
}
}
scanf("%d",&num);
}
lastPtr->nextPtr=NULL;/*ÉèÖÃÁ´±í½áÊø±ê¼Ç*/
*sPTR = headPtr;
}
LISTNODEPTR createFILOList()
{
LISTNODEPTR headPTR, currentPTR;
int num;
headPTR = NULL;
currentPTR = NULL;
printf("input positive numbers,-1 to end
");
scanf("%d",&num);
while(num!=-1)
{
currentPTR = (LISTNODEPTR)malloc(sizeof(LISTNODE));
if(currentPTR != NULL)
{
currentPTR->data = num;
if(headPTR == NULL)
{
headPTR = currentPTR;
headPTR->nextPtr = NULL;
}
else
{
currentPTR->nextPtr = headPTR;
headPTR = currentPTR;
}
}
scanf("%d", &num);
}
return headPTR;
}
void printList(LISTNODEPTR currentPtr)
{
if(currentPtr==NULL)
printf("the list is empty
");
else
{
printf("the list is:
");
while(currentPtr!=NULL)
{
printf("%d-->",currentPtr->data);
currentPtr=currentPtr->nextPtr;
}
printf("NULL
");
}
}
void destroyList(LISTNODEPTR headPtr)
{
LISTNODEPTR tempPtr;
while(headPtr!=NULL)
{
tempPtr=headPtr;
headPtr=headPtr->nextPtr;/*headPtrÖ¸ÏòÏÂÒ»¸öÒª ɾ³ýµÄ½áµã*/
free(tempPtr);
}
}
LISTNODEPTR find(LISTNODEPTR currentPtr, int value)
{
while(currentPtr != NULL && currentPtr->data != value)
{
currentPtr = currentPtr->nextPtr;
}
return currentPtr;
}
void insertNode(LISTNODEPTR *sPtr,int value)
{
LISTNODEPTR newPtr, previousPtr, currentPtr;
newPtr = (LISTNODEPTR)malloc(sizeof(LISTNODE));
if(newPtr != NULL)
{
newPtr->data = value;
newPtr->nextPtr = NULL;
previousPtr = NULL;
currentPtr = *sPtr;
while(currentPtr != NULL && currentPtr->data nextPtr;
}
if(currentPtr == *sPtr)
{
*sPtr = newPtr;
newPtr->nextPtr = currentPtr;
}
else if(currentPtr == NULL)
{
previousPtr->nextPtr = newPtr;
}
else
{
previousPtr->nextPtr = newPtr;
newPtr->nextPtr = currentPtr;
}
}
}
LISTNODEPTR createSortList()
{
int num;
LISTNODEPTR headPtr = NULL;
printf("ÇëÊäÈëÕûÊýÒÔ-1Ϊ½áÊø£º
");
scanf("%d", &num);
while(num != -1)
{
insertNode(&headPtr, num);
scanf("%d", &num);
}
return headPtr;
}
int deleteNode(LISTNODEPTR *sPtr, int value)
{
LISTNODEPTR previousPtr, currentPtr;
previousPtr = NULL;
currentPtr = *sPtr;
while(currentPtr != NULL && currentPtr->data != value)
{
previousPtr = currentPtr;
currentPtr = currentPtr->nextPtr;
}
if(currentPtr != NULL)
{
if(previousPtr == NULL)
{
*sPtr = currentPtr->nextPtr;
}
else
previousPtr->nextPtr = currentPtr->nextPtr;
free(currentPtr);
return value;
}
else
return -1;
}
void printListS(LISTNODEPTR currentPtr)
{
if(currentPtr->nextPtr == NULL)
printf("%d->", currentPtr->data);
else
{
printf("%d->", currentPtr->data);
printListS(currentPtr->nextPtr);
}
}
void printListR(LISTNODEPTR currentPtr)
{
if(currentPtr->nextPtr == NULL)
printf("%d->", currentPtr->data);
else
{
printListR(currentPtr->nextPtr);
printf("%d->", currentPtr->data);
}
}
LISTNODEPTR findMax(LISTNODEPTR headPtr)
{
LISTNODEPTR maxPtr, currentPtr;
maxPtr = headPtr;
currentPtr = headPtr->nextPtr;
while(currentPtr)
{
if(currentPtr->data > maxPtr->data)
{
maxPtr = currentPtr;
}
currentPtr = currentPtr->nextPtr;
}
return maxPtr;
}
LISTNODEPTR findMaxR(LISTNODEPTR headPtr)
{
LISTNODEPTR maxPtr;
if(headPtr->nextPtr == NULL)
return headPtr;
else
{
maxPtr = findMaxR(headPtr->nextPtr);
return headPtr->data>maxPtr->data?headPtr:maxPtr;
}
}
LISTNODEPTR reverseList(LISTNODEPTR headPtr)
{
LISTNODEPTR newHeadPtr, currentPtr;
newHeadPtr = NULL;
currentPtr = NULL;
while(headPtr)
{
currentPtr = headPtr;
headPtr = currentPtr->nextPtr;
if(newHeadPtr == NULL)
{
newHeadPtr = currentPtr;
currentPtr->nextPtr = NULL;
}
else
{
currentPtr->nextPtr = newHeadPtr;
newHeadPtr = currentPtr;
}
}
return newHeadPtr;
}
LISTNODEPTR reverseList2(LISTNODEPTR headPtr)
{
LISTNODEPTR previousPtr, currentPtr, nextPtr;
previousPtr = NULL;
currentPtr = headPtr;
while(currentPtr != NULL)
{
nextPtr = currentPtr->nextPtr;
currentPtr->nextPtr = previousPtr;
previousPtr = currentPtr;
currentPtr = nextPtr;
}
return previousPtr;
}
LISTNODEPTR reverseList3(LISTNODEPTR headPtr)
{
LISTNODEPTR lastPtr=NULL,currentPtr=NULL;
if(headPtr->nextPtr==NULL){//ÈôÊÇ×îºóÒ»¸ö½áµã£¬ÔòÖ±½Ó·µ»Ø
return headPtr;
}
else{
/*1。
µ±Ç°Á´±íÍ·½áµã´ÓÁ´±íÖвð³ý£¬ÓÉlastPtrÖ¸Ïò£¬½«³ÉΪÄæÐòºóµÄÁ´±íβ½áµã¡£headPtrÖ¸ÏòÏÂÒ»½áµã*/
lastPtr=headPtr;
headPtr=headPtr->nextPtr;
lastPtr->nextPtr=NULL;
/*2。
µÝ¹éµ÷Ó㬽«headPtrÖ¸ÏòµÄÁ´±íÄæÐò£¬ÓÉnewHeadPtrÖ¸Ïò */
headPtr=reverseList(headPtr);
/*3。 ½«lastPtrÖ¸Ïò½áµãÁ´½Óµ½newHeadPtrÖ¸ÏòÁ´±íµÄβ½áµãÖ®ºó*/ currentPtr=headPtr;
while(currentPtr->nextPtr!=NULL)//Èô²»ÊÇ×îºó½áµã
currentPtr=currentPtr->nextPtr;
currentPtr->nextPtr=lastPtr; //½«Î²½áµãÁ´½Óµ½Á´±í
return headPtr;
}
}
LISTNODEPTR mergeSortList(LISTNODEPTR head1Ptr,LISTNODEPTR head2Ptr)
{
LISTNODEPTR left2Ptr,previous1Ptr,current1Ptr,previous2Ptr,current2Ptr;
while(head2Ptr!=NULL)
{
previous1Ptr=NULL;
current1Ptr=NULL;
previous2Ptr=NULL;
current2Ptr=NULL;
left2Ptr=head2Ptr;
/*1。
ÕÒ²åÈëλÖ㺸ù¾ÝÁ´±í2µÄµ±Ç°ÔªËØÕÒµ½ÔÚÁ´±í1µÄ²åÈëλÖÃ,½«²å
Èëµ½previous1PtrºÍcurrent1PtrÖ¸ÏòµÄ½áµãÖ®¼ä£»*/
findPos(head1Ptr,left2Ptr->data,&previous1Ptr,¤t1Ptr);
if(current1Ptr==NULL)
{ /*ÈôÁ´±í1ÖÐËùÓÐÔªËؾùСÓÚÁ´±í2µÄµ±Ç°
ÔªËØ£¬Ôò½«Á´±í2ÕûÌåÁ´½Óµ½Á´±í1µÄβ²¿ */
previous1Ptr->nextPtr=left2Ptr; //Á´±í2Ö±½ÓÁ¬µ½Á´±í1ÉÏ£»
head2Ptr=NULL;//ǧÍò²»¿ÉÍüÁËд£¬·ñÔòËÀÑ»·
}
else
{//Èô²»ÊDzåÈëµ½Á´±í1β²¿
/*2。
±È½Ï²¢È·¶¨Á´±í2±¾´Î¿É¹é²¢µÄÁ¬ÐøK¸ö½áµã£»Õâ¶Î½áµãÓÉleft2PtrºÍ previous2PtrÖ¸Ïò */
findPos(head2Ptr,current1Ptr->data,&previous2Ptr,¤t2Ptr);
/*3。
½«Á´±í2µÄÓÉleft2PtrºÍprevious2PtrÖ¸ÏòµÄÁ¬Ðø½áµã¹é²¢µ½Á´±í1 */
if(current1Ptr==head1Ptr)
{ //Èô²åÈëµ½Á´±í1Í·½áµãÇ°
previous2Ptr->nextPtr=head1Ptr;
head1Ptr=left2Ptr;
}
else
{ //Èô²åµ½Á´±íÖмä
previous1Ptr->nextPtr=left2Ptr;
previous2Ptr->nextPtr=current1Ptr;
}
head2Ptr=current2Ptr;//ÈôÁ´±í2ÖÐÎÞ½áµãÁË£¬Ôò´Ëʱcurrent2PtrΪ¿Õ
}
} //END OF WHILE
return head1Ptr;
}
void findPos(LISTNODEPTR headPtr,int value,LISTNODEPTR * previousPtr,LISTNODEPTR * currentPtr)
{
LISTNODEPTR currentPtrTemp,previousPtrTemp;
currentPtrTemp=headPtr;
previousPtrTemp=NULL;
while (currentPtrTemp!=NULL &&
currentPtrTemp->datanextPtr;
}
*previousPtr=previousPtrTemp;
*currentPtr=currentPtrTemp;
}
这是一个综合链表操作,你可以好好研究。
至于那些乱码的文字,。你可以忽略了。
全部