Просмотр исходного кода

copied linlist to new files mysort and mystat -mysort is finished

Phil 7 лет назад
Родитель
Сommit
7fd3e6b9ae
2 измененных файлов с 338 добавлено и 0 удалено
  1. 169 0
      mysort.c
  2. 169 0
      mystat.c

+ 169 - 0
mysort.c

@@ -0,0 +1,169 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#define bool int
+#define false 0
+#define true 1
+
+typedef struct linlist{
+    char *payload;
+    struct linlist *next;
+}linlist_cell, *linlist_p ;
+
+linlist_p anchor;
+linlist_p *anchor_adr = &anchor;
+
+void linlist_free_cell(linlist_p junk);
+void linlist_free(linlist_p *junk);
+linlist_p linlist_alloc_cell(char* payload);
+linlist_p linlist_insert_first(linlist_p *anchor, linlist_p newcell);
+linlist_p linlist_extract_first(linlist_p *anchor);
+linlist_p linlistFind(char* payload, linlist_p anchor);
+linlist_p linlistExtract(linlist_p *anchor, linlist_p cell);
+void linlist_sort(linlist_p *anchor);
+
+int main() {
+    linlist_p i;
+
+    char buffer[255];
+    char reverse_buffer[255][255];
+    FILE *in = stdin;
+
+    while (fgets(buffer, 255, in))
+    {
+        linlist_p newcell = linlist_alloc_cell(buffer);
+       	linlist_insert_first(anchor_adr,newcell);
+    }
+	
+	linlist_sort(anchor);
+
+    printf("\nSORTED OUTPUT\n");
+    for (i = anchor; i != NULL; i = i->next)
+    {
+        fprintf(stdout, "%s", i->payload);
+    }
+    linlist_free(&anchor);
+}
+
+
+void linlist_sort(linlist_p *anchor)
+{
+	bool swapped = true;
+	linlist_p cell = anchor;
+	linlist_p dump;
+	while(swapped)
+	{
+		swapped = false;
+		cell = anchor;
+		while(cell->next)
+		{
+			if(strcmp(cell->payload,cell->next->payload) > 0)
+			{
+			//	printf("swapping %s and %s",cell->payload,cell->next->payload);
+				dump = cell->next->payload;
+				cell->next->payload = cell->payload;
+				cell->payload = dump;
+				swapped = true;
+			}else
+			{
+				
+			}	
+			cell = cell->next;
+		}
+	}
+}
+
+
+linlist_p linlistExtract(linlist_p *anchor, linlist_p cell)
+{
+	if(*anchor == cell)
+	{
+		anchor=cell->next;
+		return cell;
+	}else
+	{
+		
+	}
+}
+
+linlist_p linlistFind(char* payload, linlist_p anchor)
+{
+	printf("find\n");
+	linlist_p cell = anchor;
+
+	if(cell == NULL)
+	{
+		printf("anchor is null");
+		return NULL;
+	}
+	
+	while(cell)
+	{
+		printf("to search %s \n",payload);
+		if(strcmp(payload,cell->payload))
+		{	
+		printf("found same\n");
+			return cell;
+		}
+		else
+		{
+			printf("found nothing\n");
+			cell = cell->next;
+		}
+	}
+	return NULL;
+}
+
+
+void linlist_free_cell(linlist_p junk)
+{
+    free(junk);
+}
+
+void linlist_free(linlist_p *junk){
+
+    if ((*junk)->next == NULL)
+    {
+        free(*junk);
+        return;
+    }
+    else
+    {
+        linlist_free(&((*junk)->next));
+        free(*junk);
+    }
+}
+
+linlist_p linlist_alloc_cell(char* payload)
+{
+    linlist_p newcell = malloc(sizeof(linlist_p));
+    char *value;
+    newcell->payload = strdup(payload);
+    newcell->next = NULL;
+    return (newcell);
+
+}
+
+linlist_p linlist_insert_first(linlist_p *anchor, linlist_p newcell)
+{
+    newcell->next = *anchor;
+    *anchor = newcell;
+    return(*anchor);
+}
+
+linlist_p linlist_extract_first(linlist_p *anchor)
+{
+    if (*anchor == NULL)
+    {
+        return NULL;
+    }
+    else
+    {
+        linlist_p *return_var;
+        return_var = anchor;
+        *anchor = (*anchor)->next;
+        return (*return_var);
+    }
+
+}

+ 169 - 0
mystat.c

@@ -0,0 +1,169 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#define bool int
+#define false 0
+#define true 1
+
+typedef struct linlist{
+    char *payload;
+    struct linlist *next;
+}linlist_cell, *linlist_p ;
+
+linlist_p anchor;
+linlist_p *anchor_adr = &anchor;
+
+void linlist_free_cell(linlist_p junk);
+void linlist_free(linlist_p *junk);
+linlist_p linlist_alloc_cell(char* payload);
+linlist_p linlist_insert_first(linlist_p *anchor, linlist_p newcell);
+linlist_p linlist_extract_first(linlist_p *anchor);
+linlist_p linlistFind(char* payload, linlist_p anchor);
+linlist_p linlistExtract(linlist_p *anchor, linlist_p cell);
+void linlist_sort(linlist_p *anchor);
+
+int main() {
+    linlist_p i;
+
+    char buffer[255];
+    char reverse_buffer[255][255];
+    FILE *in = stdin;
+
+    while (fgets(buffer, 255, in))
+    {
+        linlist_p newcell = linlist_alloc_cell(buffer);
+       	linlist_insert_first(anchor_adr,newcell);
+    }
+	
+	linlist_sort(anchor);
+
+    printf("\nSORTED OUTPUT\n");
+    for (i = anchor; i != NULL; i = i->next)
+    {
+        fprintf(stdout, "%s", i->payload);
+    }
+    linlist_free(&anchor);
+}
+
+
+void linlist_sort(linlist_p *anchor)
+{
+	bool swapped = true;
+	linlist_p cell = anchor;
+	linlist_p dump;
+	while(swapped)
+	{
+		swapped = false;
+		cell = anchor;
+		while(cell->next)
+		{
+			if(strcmp(cell->payload,cell->next->payload) > 0)
+			{
+			//	printf("swapping %s and %s",cell->payload,cell->next->payload);
+				dump = cell->next->payload;
+				cell->next->payload = cell->payload;
+				cell->payload = dump;
+				swapped = true;
+			}else
+			{
+				
+			}	
+			cell = cell->next;
+		}
+	}
+}
+
+
+linlist_p linlistExtract(linlist_p *anchor, linlist_p cell)
+{
+	if(*anchor == cell)
+	{
+		anchor=cell->next;
+		return cell;
+	}else
+	{
+		
+	}
+}
+
+linlist_p linlistFind(char* payload, linlist_p anchor)
+{
+	printf("find\n");
+	linlist_p cell = anchor;
+
+	if(cell == NULL)
+	{
+		printf("anchor is null");
+		return NULL;
+	}
+	
+	while(cell)
+	{
+		printf("to search %s \n",payload);
+		if(strcmp(payload,cell->payload))
+		{	
+		printf("found same\n");
+			return cell;
+		}
+		else
+		{
+			printf("found nothing\n");
+			cell = cell->next;
+		}
+	}
+	return NULL;
+}
+
+
+void linlist_free_cell(linlist_p junk)
+{
+    free(junk);
+}
+
+void linlist_free(linlist_p *junk){
+
+    if ((*junk)->next == NULL)
+    {
+        free(*junk);
+        return;
+    }
+    else
+    {
+        linlist_free(&((*junk)->next));
+        free(*junk);
+    }
+}
+
+linlist_p linlist_alloc_cell(char* payload)
+{
+    linlist_p newcell = malloc(sizeof(linlist_p));
+    char *value;
+    newcell->payload = strdup(payload);
+    newcell->next = NULL;
+    return (newcell);
+
+}
+
+linlist_p linlist_insert_first(linlist_p *anchor, linlist_p newcell)
+{
+    newcell->next = *anchor;
+    *anchor = newcell;
+    return(*anchor);
+}
+
+linlist_p linlist_extract_first(linlist_p *anchor)
+{
+    if (*anchor == NULL)
+    {
+        return NULL;
+    }
+    else
+    {
+        linlist_p *return_var;
+        return_var = anchor;
+        *anchor = (*anchor)->next;
+        return (*return_var);
+    }
+
+}