F
problem ist nur, daß beliebig viele, beliebig lange strings in der verketteten liste sind. muß da irgendwie mit index arbeiten, damit ich nicht den überblick verliere, wo schon sortiert ist und wo nicht.das ist,was ich bisher habe, fehlt halt nur noch die funktion stringBuffer* stringBufferSort(stringBuffer*).
typedef struct stringBufferElement {
char* line;
struct stringBufferElement* next;
} stringBufferElement;
typedef struct stringBuffer {
struct stringBufferElement* first;
struct stringBufferElement* last;
int numberOfNextElement;
} stringBuffer;
/*extern void yyerror(char* msg);*/
stringBuffer* newStringBuffer() {
stringBuffer* temp = (stringBuffer*) malloc(sizeof(stringBuffer));
temp->numberOfNextElement = 0;
temp->first = 0;
temp->last = 0;
return temp;
}
void stringBufferAppend(stringBuffer* buffer, char* text) {
stringBufferElement* newElement = (stringBufferElement*) malloc(sizeof(stringBufferElement));
newElement->line = strdup(text);
newElement->next = 0;
if (buffer->last != 0) buffer->last->next = newElement;
else buffer->first = newElement;
buffer->last = newElement;
buffer->numberOfNextElement++;
}
void stringBufferInsert(stringBuffer* buffer, int address, char* text) {
stringBufferElement* newElement;
stringBufferElement* elem;
int i;
newElement = (stringBufferElement*) malloc(sizeof(stringBufferElement));
newElement->line = strdup(text);
if (address == 0) {
newElement->next = buffer->first;
buffer->first = newElement;
}
else {
elem = buffer->first;
for (i=0; i<address-1; i++) {
if (elem->next != 0) elem = elem->next;
else ;/*yyerror("inserting address in stringbuffer to large (compiler-intern error).\n");
*/ }
newElement->next = elem->next;
elem->next = newElement;
}
buffer->numberOfNextElement++;
}
void stringBufferConcatenate(stringBuffer* buf1, stringBuffer* buf2) {
if (buf2->first == 0) return;
buf1->last->next = buf2->first;
buf1->last = buf2->last;
buf1->numberOfNextElement = buf1->numberOfNextElement + buf2->numberOfNextElement;
free(buf2); /* XXX */
}
void stringBufferSort(stringBuffer*){}
void stringBufferPrint(stringBuffer* buffer) {
stringBufferElement* elem = buffer->first;
if (elem == 0) {
printf("empty buffer\n");
return;
}
while (elem->next != 0) {
printf("%s\n", elem->line);
elem = elem->next;
}
printf("%s\n", elem->line);
}