Advertisement
Guest User

Listák

a guest
Nov 12th, 2019
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.89 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. typedef struct ListElement {
  4.     int Value;
  5.     struct ListElement* NextElement;
  6. } ListElement;
  7.  
  8. typedef struct List{
  9.     ListElement* Head;
  10. } List;
  11.  
  12. void PrintValues(List list) {
  13.     ListElement* p = list.Head;
  14.     while (p != NULL) {
  15.         printf("%d ", p->Value);
  16.         p = p->NextElement;
  17.     }
  18.     printf("\n");
  19. }
  20.  
  21. void PushFront(List* list, int value) {
  22.     ListElement* p = (ListElement*)malloc(sizeof(ListElement));
  23.     p->Value = value;
  24.     p->NextElement = list->Head;
  25.     list->Head = p;
  26. }
  27.  
  28. void PopFront(List* list) {
  29.     if (list->Head != NULL) {
  30.         ListElement* p = list->Head;
  31.         list->Head = p->NextElement;
  32.         free(p);
  33.     }
  34. }
  35.  
  36. void PushBack(List* list, int value) {
  37.     ListElement* newElement = (ListElement*)malloc(sizeof(ListElement));
  38.  
  39.     ListElement* lastElement = list->Head;
  40.     while (lastElement->NextElement != NULL)
  41.         lastElement = lastElement->NextElement;
  42.  
  43.     lastElement->NextElement = newElement; 
  44.     newElement->Value = value;
  45.     newElement->NextElement = NULL;
  46. }
  47.  
  48. void PopBack(List* list) {
  49.     if (list->Head != NULL) {
  50.         ListElement* lastElement = list->Head;
  51.         ListElement* beforeLastElement = NULL;
  52.         while (lastElement->NextElement != NULL) {
  53.             beforeLastElement = lastElement;
  54.             lastElement = lastElement->NextElement;
  55.         }
  56.         beforeLastElement->NextElement = NULL;
  57.         free(lastElement);
  58.     }
  59. }
  60.  
  61. void PutInto(List* list, int place, int value) {
  62.     ListElement* p = list->Head;
  63.     ListElement* newElement = (ListElement*)malloc(sizeof(ListElement));
  64.     for (int i = 0; i < place-2; i++)
  65.         p = p->NextElement;
  66.     newElement->NextElement = p->NextElement;
  67.     p->NextElement = newElement;
  68.     newElement->Value = value;
  69. }
  70.  
  71. void PopFrom(List* list, int place) { //Ez valamiért nem működik pl 3 ra
  72.     ListElement* p1 = list->Head;
  73.     for (int i = 0; i < place - 2; i++)
  74.         p1 = p1->NextElement;
  75.    
  76.     ListElement* p2 = p1->NextElement;
  77.     p1->NextElement = p2->NextElement;
  78.     free(p2);
  79. }
  80.  
  81. void Dispose(List* list) { //Valamiért ő se szeretne működni
  82.     while (list->Head != NULL)
  83.         PopFront(list);
  84. }
  85.  
  86. int main() {
  87.    
  88.     ListElement l1 = { 1, NULL };
  89.     ListElement l2 = { 2, &l1 };
  90.     ListElement l3 = { 3, &l2 };
  91.  
  92.     List Ferenc;
  93.     Ferenc.Head = &l3;
  94.  
  95.     //Teszt
  96.     PrintValues(Ferenc);
  97.  
  98.     //Adjunk az elejére egy 5 öst
  99.     PushFront(&Ferenc, 5);
  100.     PrintValues(Ferenc);
  101.  
  102.     //Vegyük vissza az 5-öst az elejéről
  103.     PopFront(&Ferenc);
  104.     PrintValues(Ferenc);
  105.  
  106.     //Adjunk a végére egy 5 öst
  107.     PushBack(&Ferenc, 5);
  108.     PrintValues(Ferenc);
  109.  
  110.     //Vegyük vissza az 5-öst a végéről
  111.     PopBack(&Ferenc);
  112.     PrintValues(Ferenc);
  113.  
  114.     //Rakjunk a 2. helyre egy 5-öst
  115.     PutInto(&Ferenc, 2, 5);
  116.     PrintValues(Ferenc);
  117.  
  118.     //Vegyük el a 2.helyre rakott 5-öst EZ NEM MŰKÖDIK
  119.     /*PopFrom(&Ferenc, 3);
  120.     PrintValues(Ferenc);*/
  121.  
  122.     //Mostmár kösz elég lesz a Feriből
  123.     //Dispose(&Ferenc); MÉGSEM ELÉG BELŐLE :(
  124.  
  125.     /*
  126.         OUTPUT:
  127.         3 2 1
  128.         5 3 2 1
  129.         3 2 1
  130.         3 2 1 5
  131.         3 2 1
  132.         3 5 2 1
  133.     */
  134.     return 0;
  135. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement