c语言输入一个链表,如何用c语言创建链表和输入一个新链表

#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,&current1Ptr);

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,&current2Ptr);

/*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;

}

这是一个综合链表操作,你可以好好研究。

至于那些乱码的文字,。你可以忽略了。

全部

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值