Thread: for loop with sort issues

Hybrid View

Previous Post Previous Post   Next Post Next Post
  1. #1
    Registered User SKeane's Avatar
    Join Date
    Sep 2006
    Location
    England
    Posts
    234
    In English?

  2. #2
    Registered User
    Join Date
    Sep 2006
    Posts
    104
    i can enter in the data. But the do while statment is not working. I'm still not able to put the data into the array. Any ideas. what I do is enter in the data. And the Index stays the same ever changes.
    Code:
     /************************************************************
    FILE NAME:    Lab3
    DESCRIPTION:  Calculate loan amortization
    DATE:         Oct 8, 2006 
    AUTHOR:       Cheryl B Jensen
    ASSIGNMENT:   Lab 2
    FUNCTIONS:    main, Linked_List
    /***************************************************************/
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include <ctype.h>
    
    typedef struct listNode				/* struct definition for linked list */
    {
    	int data;
    	struct listNode *priorPtr;
    	struct listNode *nextPtr;
    }ListNode;
    
    struct listNode *start = NULL;		/* initialize first node */
    struct listNode *last = NULL;		/* initialize last node */
    
    /*int Linked_List (int, *ptr);  /*prototype for function */
    
    
    /*******************************************************************
    
    FUNCTION HEADER: Main
    FUNCTION:     Main
    DESCRIPTION:  Ask for user input from keyboard up to 50 integers,
    				store the data in an array, sort the array, create a linked 
    				list, and display the data from the linked list
    INPUT:
      PARAMETERS:  input up to 50 integers (Max) - use Count to determine 
      				actual size of array
      KEYBOARD:    Read user's input listed above
      FILE:        No input file for this program
    
    OUTPUT:
      RETURN VALUE: Display linked list of the sorted array in ascending order
      PARAMETERS:   1 to Count (size of array)
      DISPLAY:      display contents of array within the linked list 
      FILE:         No DATA WRITTEN TO FILE
      CALLS TO:     Linked_List
    *******************************************************************/
    
    #include <stdio.h>
    #include <math.h>
    #include <ctype.h>
    
    
    #define Max 50	
    int main (void)
    {
    		/* max size of array input; array will end when it reaches
    						max or when user quits by hitting enter (null entry) */
    int ArrayInput[Max]; /* declared, defined, & initialized array */
    int Count = 0;		  /* actual size of array, defined by user or Max */
    int InputNum;			/* int entered by user */	
    int Index = 0;		/* location of current array cell in first for statement*/
    int Index2 = 0;		/* location of current array cell in 2nd for statement */
    int hold = 0;		/* temporary holding location for swap */
    int Pass = 0;		/* loop counter */
    char More;		/* to continue or end loop by user input of null entry */
    struct listNode *start = NULL;  /* initialize start pointer structure */
    struct listNode *last = NULL;	/* initialize last pointer structure */
    struct listNode *data = NULL;	/* initialize data pointer structure */ 
    struct listNode *tempnode = NULL;	/* initialize temporary pointer */
    
    
    
    	printf ("Welcome to your Sort program.\n");
    	printf ("This program will sort up to 50 integers in ascending order.\n");
    	printf ("Ready to start program? Y or N\n");
    	scanf ("\n%c", &More);	
    		while (((More == 'Y') || (More == 'y')) && (Index < Max))	
    			{
    			printf ("\nEnter an integer:  ");
    			scanf ("\n%d", &ArrayInput[Index]); 
    			
    				if (ArrayInput[Index] <= 0)
    				{
    					printf ("\nInvalid entry. Try again:\n\n");
    					scanf ("\n%d", &ArrayInput[Index]);
    				} /* end of if statement */
    				else
    				{
    				Index++;
    				printf ("\nDo another? Y or N?\n");
    				scanf ("\n%c", &More); 	
    				} /* end of else statement */
    			} /* end of while statement */
    			
    		printf ("%d", ArrayInput[Index]);		
    		Count = Index;			
    		
    		for (Pass = 1; Pass < Count; Pass++) {
    			for (Index = 0; Index, Count - 1; Index++) {
    				if (ArrayInput[Index] > ArrayInput[Index + 1]) {
    					hold = ArrayInput[Index];
    					ArrayInput[Index] = ArrayInput[Index +1];
    					ArrayInput[Index +1] = hold;
    				} /* end of if */
    			} /* end of inner for */
    			data = (struct ListNode *) malloc(sizeof(ListNode));
    			if (!data)
    				return -1;
    				data->data= ArrayInput[Index];
    				Linked_List (data, &start, &last);
    		} /* end of outer for */
    		
    		/*	Index++;
    			printf ("\nDo another? Y or N?\n");
    			scanf ("\n%c", &More); 	
    			} /* end of while statement */
    			
    		tempnode = start;
    		printf ("Your data displayed in ascending order:  \n\n");
    		while (tempnode) {
    			printf ("\n%d\n",tempnode->data);
    			tempnode = tempnode->nextPtr;
    		} /* end of while statement */	
    		
    
         	system ("PAUSE");
         	getchar ();
         	getchar ();
        	return 0;
        }  /* end of main function */
    
    
    
    /*****************************************************************************
    FUNCTION HEADER: Linked_List
    FUNCTION:     Linked_Array
    DESCRIPTION:  Create a linked list from the sorted array
    INPUT:
      PARAMETERS:  sorted array
      KEYBOARD:    no keyboard input
      FILE:        No input file for this program
    
    OUTPUT:
      RETURN VALUE: Return linked list
      PARAMETERS:   size of actual sorted array
      DISPLAY:      no display yet 
      FILE:         No DATA WRITTEN TO FILE
      CALLS TO:     no functions; called by main
    *******************************************************************/
    int Linked_List ( struct listNode 	*newnode,
    									struct listNode **start, 
    									struct listNode **last
    									)									
    	
    {
    	struct listNode *oldptr, *ptr;
    	if (*last == NULL)
          {
    			newnode->nextPtr = NULL;
    			newnode->priorPtr = NULL;
    			*last = newnode;
    			*start = newnode;
    			return;
    	}
    	ptr = *start;
    	oldptr = NULL;
    	while (ptr)
    	{
    			if(ptr->data < newnode->data) {
    				oldptr = ptr;
    				ptr = ptr->nextPtr;
    			}
    			else
    			{
    				if (ptr->priorPtr) {
    					ptr->priorPtr->nextPtr = newnode;
    					newnode->nextPtr = ptr;
    					newnode->priorPtr = ptr->priorPtr;
    					ptr->priorPtr = newnode;
    					return;
    				}
    							
    					newnode->nextPtr = ptr;
    					newnode->priorPtr = NULL;
    					ptr->priorPtr = newnode;
    					*start = newnode;
    					return;
    					
    			} /* end of else statement */
    			
    	} /* end of while statement */
    	oldptr->nextPtr = newnode;
    	newnode->nextPtr = NULL;
    	newnode->priorPtr = oldptr;
    	*last = newnode;
    
    	} /* end of function */

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Straight Insertion Sort function problem
    By StaticKyle in forum C++ Programming
    Replies: 6
    Last Post: 05-12-2008, 04:03 AM
  2. threaded merge sort
    By AusTex in forum Linux Programming
    Replies: 4
    Last Post: 05-04-2005, 04:03 AM
  3. Sorting
    By vasanth in forum A Brief History of Cprogramming.com
    Replies: 12
    Last Post: 11-10-2003, 05:21 PM
  4. radix sort and radix exchange sort.
    By whatman in forum C Programming
    Replies: 1
    Last Post: 07-31-2003, 12:24 PM
  5. Shell Sort vs Heap Sort vs Quick Sort
    By mackol in forum C Programming
    Replies: 6
    Last Post: 11-22-2002, 08:05 PM