从C

时间:2015-10-31 13:30:52

标签: c linked-list queue

目前我正在编写一份代码,要求我复制"来自链表的一系列整数(用户输入)并将它们放入队列中。

我知道我需要一个名为enqueue的函数来继续,但是,我被教导通过简单地使用insertNode()函数,我可以创建一个基本的入队函数。 e.g

   void enqueue(Queue *q, int item)
     {
      insertNode(&(q->ll),q->ll.size, item);
      removeNode(ll,0);
     }

给定insertNode():

 int insertNode(LinkedList *ll, int index, int value)
{
    ListNode *pre, *cur;

    if (ll == NULL || index < 0 || index > ll->size + 1)
        return -1;
    if (ll->head == NULL || index == 0) {
        cur = ll->head;
        ll->head = malloc(sizeof(ListNode));
        ll->head->item = value;
        ll->head->next = cur;
        ll->size++;
        return 0;
    }

    if ((pre = findNode(ll, index - 1)) != NULL) {
        cur = pre->next;
        pre->next = malloc(sizeof(ListNode));
        pre->next->item = value;
        pre->next->next = cur;
        ll->size++;
        return 0;
    }

    return -1;
}

然后最后使用另一个函数来使用enqueue()

    void createQueueFromLinkedList(LinkedList *ll, Queue * q)
    {

    if (isEmptyQueue) {
        removeAllItemsFromQueue(q);
    }// empty the queue if it is not empty
    while (ll->size)
    {
    enqueue(q, ll->head->item);     
    //code to remove ll->size by 1 each time 
        }
    }


    int isEmptyQueue(Queue *q)
     {
       if ((q->ll).size == 0){
         return 0;
      }
         return 1;
      }

我面临的问题是,我不确定我的enqueue()是否正常工作,或者是否有更好的方法可以做到这一点? 提前谢谢。

Queue,Linkedlist和ListNode的定义;假设我不允许更改它们:

typedef struct _listnode
{
    int item;
    struct _listnode *next;
} ListNode; 

typedef struct _linkedlist
{
    int size;
    ListNode *head;
} LinkedList;   

typedef struct _queue
{
    LinkedList ll;
} Queue;

0 个答案:

没有答案