Beispiel #1
0
//向任意指定的位置插入新节点
void insert(List *plist, int data, int pos)
{
    //1.判断坐标是否合法
    if(pos < 0 || pos > size(plist))
    {
        //printf("坐标不合法, 元素%d插入失败\n", data);
        //return;

        //pos = 0; //默认插入到链表的头节点位置
        pos = size(plist); //默认插入到尾部

    }


    //2.处理pos=0时的情况
    if(0 == pos)
    {
        push_head(plist, data);
        return;
    }

    //3.处理pos=size(plist)时的情况
    if(size(plist) == pos)
    {
        push_tail(plist, data);
        return;
    }

    //4.创建新节点
    Node *pn = create_node(data);

    //5.处理pos=pos时的情况
    Node *pt = plist->head;
    int i = 0;
    for(i = 1; i < pos; i++)
    {
        //将比pos = 1多出来的next跑光
        pt = pt->next;
    }
    pn->next = pt->next;
    pt->next = pn;

    //6.节点个数加1
    ++plist->cnt;

}
static void test_vector_back_iterator(void)
{
  using string = mtr::string;
  using vector = mtr::vector<string>;

  const char str1[] = "Hello world";
  const char str2[] = "Goodbye";

  vector v;
  SHOULD_BE_EQ((int) v.length(), 0, "Length of vector");

  auto x = v.push_tail(string(str1));
  SHOULD_BE_EQ((int) x.length(), 1, "Length of vector");

  auto y = x.push_tail(string(str2));
  SHOULD_BE_EQ((int) y.length(), 2, "Length of vector");

  auto it = y.back_iterator();
  SHOULD_BE_EQ(it(), string(str2), "First string should be the second one appended to vector");
  SHOULD_BE_EQ(it.next()(), string(str1), "Second string should be the first one appended to vector");
}
Beispiel #3
0
 message&
 message::push_tail(const void* p, size_t size)
 {
     return push_tail(element(p, size));
 }
Beispiel #4
0
 message&
 message::push_tail(const std::string& data)
 {
     return push_tail(element(data));
 }
Beispiel #5
0
 message::message(const element& elem)
 {
     push_tail(elem);
 }
Beispiel #6
0
 message::message(const void* p, size_t size)
 {
     push_tail(p, size);
 }
Beispiel #7
0
 message::message(const std::string& data)
 {
     push_tail(data);
 }
Beispiel #8
0
int main()
{
    //创建单链表, 并且初始化
    List list;
    list.head = NULL;
    list.tail = NULL;
    list.cnt = 0;


    printf("%s\n", empty(&list) ? "空" : "没空");
    printf("%s\n", full(&list) ? "满" : "没满");
    printf("链表中有%d个元素\n", size(&list));
    printf("----------------\n");
    push_head(&list, 11);
    travel(&list);
    push_head(&list, 22);
    travel(&list);
    push_head(&list, 33);
    travel(&list);
    printf("链表中有%d个元素\n", size(&list));
    printf("----------------\n");

    push_tail(&list, 44);
    travel(&list);
    push_tail(&list, 55);
    travel(&list);
    push_tail(&list, 66);
    travel(&list);

    printf("链表中有%d个元素\n", size(&list));
    printf("----------------\n");
    insert(&list, 77, -2);
    printf("链表中有%d个元素\n", size(&list));
    travel(&list);
    insert(&list, 88, 0);
    printf("链表中有%d个元素\n", size(&list));
    travel(&list);
    insert(&list, 99, 5);
    printf("链表中有%d个元素\n", size(&list));
    travel(&list);
    insert(&list, 100, 2);
    printf("链表中有%d个元素\n", size(&list));
    travel(&list);

    printf("--------------------\n");
    printf("头节点元素值: %d\n", get_head(&list));
    printf("尾节点元素值: %d\n", get_tail(&list));

    printf("--------------------\n");
    pop_head(&list);
    printf("链表中有%d个元素\n", size(&list));
    printf("头节点元素值: %d\n", get_head(&list));
    printf("尾节点元素值: %d\n", get_tail(&list));
    printf("--------------------\n");
    pop_tail(&list);
    printf("链表中有%d个元素\n", size(&list));
    printf("头节点元素值: %d\n", get_head(&list));
    printf("尾节点元素值: %d\n", get_tail(&list));

    printf("--------------------\n");
    del(&list, -2);
    travel(&list);

    del(&list, 0);
    travel(&list);

    del(&list, 4);
    travel(&list);

    del(&list, 1);
    travel(&list);

    del(&list, 2);
    travel(&list);

    del(&list, 7);
    travel(&list);
    printf("--------------------\n");
    reverse_list(&list);
    printf("链表中有%d个元素\n", size(&list));
    printf("头节点元素值: %d\n", get_head(&list));
    printf("尾节点元素值: %d\n", get_tail(&list));
    travel(&list);
    printf("--------------------\n");
    reverse_travel_list(&list);
    printf("=====清空========\n");
    clear(&list);
    return 0;
}