1 #include <stdio.h> 2 #include <stdlib.h> 3 4 struct listNode{ 5 char data; 6 struct listNode *nextPtr; 7 }; 8 typedef struct listNode LISTNODE; 9 typedef LISTNODE *LISTNODEPTR; 10 11 void insertList(LISTNODEPTR *,char); 12 char deleteList(LISTNODEPTR *,char); 13 int isEmpty(LISTNODEPTR); 14 void printList(LISTNODEPTR); 15 void instruction(void); 16 17 int main() 18 { 19 LISTNODEPTR startPtr=NULL; 20 int choice; 21 char item; 22 instruction();/*显示菜单*/ 23 printf("\n?\n"); 24 scanf("%d",&choice); 25 while(choice!=3) 26 { 27 switch(choice) 28 { 29 case 1: 30 printf("Enter a character:"); 31 scanf("\n%c",&item); 32 insertList(&startPtr,item); 33 printList(startPtr); 34 break; 35 case 2: 36 if(!isEmpty(startPtr)) 37 { 38 printf("Enter character to be deleted:"); 39 scanf("\n%c",&item); 40 if(deleteList(&startPtr,item)) 41 42 { 43 printf("%c deleted.\n",item); 44 printList(startPtr); 45 } 46 else 47 printf("%c not found.\n\n",item); 48 49 } 50 else 51 printf("List is empty.\n\n"); 52 break; 53 default: 54 printf("Invalid choice.\n\n"); 55 instruction(); 56 break; 57 } 58 printf("?"); 59 scanf("%d",&choice); 60 } 61 printf("End of run.\n"); 62 63 return 0; 64 } 65 66 67 void instruction(void) 68 { 69 printf("Enter your choice:\n" 70 "1 to insert an element to the List.\n" 71 "2 to delete an element from the List.\n" 72 "3 to end."); 73 } 74 75 void insertList(LISTNODEPTR *sPtr,char value) 76 { 77 LISTNODEPTR newPtr,previousPtr,currentPtr; 78 newPtr=malloc(sizeof(LISTNODEPTR)); 79 if(newPtr!=NULL) 80 { 81 newPtr->data=value; 82 newPtr->nextPtr=NULL; 83 previousPtr=NULL; 84 currentPtr=*sPtr; 85 while(currentPtr!=NULL&&value>currentPtr->data) 86 { 87 previousPtr=currentPtr; 88 currentPtr=currentPtr->nextPtr; 89 } 90 if(previousPtr==NULL) 91 { 92 newPtr->nextPtr=*sPtr; 93 *sPtr=newPtr; 94 } 95 else 96 { 97 previousPtr->nextPtr=newPtr; 98 newPtr->nextPtr=currentPtr; 99 } 100 101 } 102 else 103 printf("%c not inserted.No memory avaliable.\n",value); 104 } 105 106 char deleteList(LISTNODEPTR *sPtr,char value) 107 { 108 LISTNODEPTR previousPtr,currentPtr,tempPtr; 109 if(value==((*sPtr)->data)) 110 { 111 tempPtr=*sPtr; 112 *sPtr=(*sPtr)->nextPtr; 113 free(tempPtr); 114 return value; 115 } 116 else 117 { 118 previousPtr=*sPtr; 119 currentPtr=(*sPtr)->nextPtr; 120 while(currentPtr!=NULL&¤tPtr->data!=value) 121 { 122 previousPtr=currentPtr; 123 currentPtr=currentPtr->nextPtr; 124 } 125 if(currentPtr!=NULL) 126 { 127 tempPtr=currentPtr; 128 previousPtr->nextPtr=currentPtr->nextPtr; 129 free(tempPtr); 130 return value; 131 } 132 } 133 return '\0'; 134 } 135 136 137 int isEmpty(LISTNODEPTR sPtr) 138 { 139 return sPtr==NULL; 140 } 141 142 void printList(LISTNODEPTR currentPtr) 143 { 144 if(currentPtr==NULL) 145 printf("List is empty.\n\n"); 146 else 147 { 148 printf("The List is:\n"); 149 while(currentPtr!=NULL) 150 { 151 printf("%c-->",currentPtr->data); 152 currentPtr=currentPtr->nextPtr; 153 154 } 155 printf("NULL \n\n"); 156 } 157 }