Ich versuche, eine Warteschlange zu erstellen, so dass ich das Array in umgekehrter Reihenfolge gespeichert werden muss, so dass die letzte Eingabe der Kopf des Arrays sein kann, so kann ich Zeug hinzufügen und lösche vorherige Eingaben mit dem Kopf, der zuerst geht (fifo). Ich habe die Funktion head_find gemacht, um den Zeiger bis zum letzten Punkt zu zählen und ihn dann zu löschen und umzuschalten. InhaltWie man den Inhalt des Kopfes des Arrays druckt und es löscht
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <ctype.h>
//struct node *head;
//struct node *size;
int head;
void reverse_array(int*, int);
int main(){
int x,i,c,length;
char collect;
int rear = -1;
int front = -1;
int *size = NULL;
START:while(1){
printf("Enter operation \n");
scanf("%c",&collect);
switch(collect) {
case 'C' :
printf("create queue\n");
printf("enter size of queue \n");
scanf("%d",&x);
if(x <=0){
printf("Numbers Entered must be non Zero postive Numbers \n");
}
else
printf("Numbers is good \n");
goto START; // leave case
break;
case 'I' :
printf("write vaules\n");
if (front == -1)
// int *size =calloc(x,sizeof(int)); //make size of array
size = (int*)malloc(sizeof(int)*x);
for(i=0;i<x;i++){
scanf("%d",(size+i));
// scanf("%d",&(size[i])); // scan vaules to address
}
/*
for(i=x-1;d=0;i>=0;i--;d++)
int *size2 =calloc(x,sizeof(int));
&(size[d]))=&(size[i]);
for (c = 0; c < x; c++)
printf("%d\n", &(size[c]);
*/
break;
case 'R' :
printf("Read head of queue\n");
/* if (front == - 1)
printf("Queue is empty \n");
*/
head =head_find(&size);
printf("head is %d \n",head);
break;
case 'P' :
printf("print contents=\n");
if (x==0){ // not working as a check
printf("queue is empty\n");
}
else
reverse_array(size,x);
for (i = 0 ; i < x ; i++)
printf("size[%d]= %d\n", i,*(size+i));
free(size);
break;
case 'L' :
printf("get length of queue\n");
length=point_ln(size);
printf("Length is %d \n",length);
break;
case 'M' :
printf("Modify length\n");
break;
default:
printf("letter must be in caps \n");
}
}
return 0;
}
int head_find(int *c){
int begin =0;
while(*c != '\0'){
begin --;
c++;
}
return &c;
}
int point_ln(int *p){
int start =0;
while (*p != '\0') {
start++;
p++;
}
return start;
}
void reverse_array(int *size,int x){
int i,d;
int *rev =calloc(x,sizeof(int));
if(rev == NULL)
exit(EXIT_FAILURE);
for (i = x - 1, d = 0; i >= 0; i--, d++)
*(rev+d) = *(size+i);
for (i = 0 ; i< x ; i++)
*(size+i) = *(rev+i);
free(rev);
}
Ihr Code definiert zweimal 'reverse_array()'. Kompiliert das? Wenn ja, verwenden Sie keinen C-Compiler. – alk
Bitte den Code richtig einrücken. Wie es steht, ist es (zu?) Schwer zu lesen. – alk