繁体   English   中英

单链表头尾法?

[英]singly linked list head and tail method?

我对c编程语言比较陌生,并且一直在玩耍以熟悉它,但是我不确定如何使用下面要尝试的结构和数据来实际实现链接列表。 基本上,目标是从带有头和尾的单链接列表中添加项目。

更新:我试图在我的add函数中编写一些代码,但还没有对其进行排序,但是它看起来是什么样的?

代码来源

typedef struct {
    char car_model[32],car_name[32];

} CarObjects;

typedef struct myNode{

    struct myNode* next;
    CarObjects* data;

} MyList;

//initialize list
void declareList(MyList* someList){
    someList->next = NULL;
}

void insertElementByTitle(MyList* someList, CarObjects* someCar){

    //first case adding to an empty list.
    if(someList == NULL){
        someList = malloc(sizeof(MyList));
        someList->data = someCar;
        someList->next = NULL;
    }
//END OF first case adding to an empty list.

//make thee list's head and tail node, point to the first element since its an empty list
    someList->head = someList;
    someList->tail = someList->head;


    while(someList->next != NULL)
       someList = someList->next;

    someList->next = malloc(sizeof(MyList));
    someList = someList->next;
    someList->data = newBook;
    someList->next = NULL;


}


int main(){


   MyList* listHead= NULL;
   MyList* listTail= NULL;


   //Somehow add an element to the list



   return 0;
}

首先,正确定义您的结构。

typedef struct car{
char car_model[32],car_name[32];
};

typedef struct myList{
myList * next;
car * carObject;
};

现在,您正在尝试插入作为插入排序技术。

void insertElementByTitle(MyList* someList, CarObjects* someCar){
\\I assume someList is pointing the head of the linked list
\\One more assumption that, the Linked List is already sorted and need to inset
\\someCar in the correct position.
MyList *secondPointer = someList->next;
while(secondPointer != null)
{
     if(ifCarIsInBetweenSomeListAndSecondPointer(someList,secondPointer,someCar))
     {
      someList->next = newNode(someCar);
      someList->next->next=secondPointer;
      break;
     }
  someList = secondPointer; secondPointer = secondPointer->next;
}
if(secondPointer == null)
{
     someList->next = newNode(someCar);
}
}

现在,您需要两个功能

myNode* newNode(car * someCar);
bool ifCarIsInBetweenSomeListAndSecondPointer(myNode *someList,myNode *secondPointer,car *someCar);

myNode* newNode(car * someCar){
myNode * t =(struct myNode*)malloc(sizeof(struct myNode));
t->carObject = someCar;
t->next= null;
return t;
}

bool ifCarIsInBetweenSomeListAndSecondPointer(myNode *someList,myNode *secondPointer,car *someCar){
if( (strcmp(someList->carObject->car_name,someCar->carObject)<0) &&(strcmp(someCar->carObject,secondPointer->carObject->car_name)<0))
          return true;
return false;
}

请参考在线参考,例如geeksforgeeks-链表 ,以获得更好的理解。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM