int verificar_parenteses(char formula[],int num){ int i; for(i=0;formula[i]!='\0';i++){ if(formula[i]=='('){ add_tail(tail,formula[i]); // printf("\n\n"); // ver_frente(head); // printf("\n\n"); } if(formula[i]==')'){ if(pop_tail(tail)!='('){ while(pop_tail(tail)!='*'); return 0; } } } if(pop_tail(tail)=='*')return 1; else{ while(pop_tail(tail)!='*'); return 0;} }
/* No params, just use curDir */ void move() { int nx, ny; switch (curDir) { case RIGHT: nx = snake->x+1; ny = snake->y; break; case LEFT: nx = ((int)(snake->x))-1; ny = snake->y; break; case UP: nx = snake->x; ny = ((int)(snake->y))-1; break; case DOWN: nx = snake->x; ny = snake->y+1; break; } if(nx < 0) nx = MAX_LEN; if(nx > MAX_LEN) nx = 0; if(ny < 0) ny = MAX_HEI; if(ny > MAX_HEI) ny = 0; add_head(nx, ny); check_collisions(); if(!no_pop) pop_tail(); else no_pop--; }
//删除指定位置的节点 int del(List *plist, int pos) { //1.判断坐标是否合法 if(pos < 0 || pos >= size(plist)) { printf("坐标不合法, 删除节点失败\n"); return -1; //pos = 0; //pos = size(plist) - 1; } //2.当pos = 0时, 调用pop_head函数 if(0 == pos) { return pop_head(plist); } //3.当pos = size(plist)-1, 调用pop_tail函数 if(size(plist) - 1 == pos) { return pop_tail(plist); } //4.当pos为其他数值时的情况 Node *pt = plist->head; int i = 0; for(i = 1; i < pos; i++) { //把对出来的next跑光 pt = pt->next; } //把pos=1时的代码处理如下 Node *pn = pt->next; pt->next = pn->next; int temp = pn->data; free(pn); pn = NULL; --plist->cnt; return temp; }
static void test_pop_tail(void) { using string = mtr::string; using vector = mtr::vector<string>; const char *strs[] = { "string 1", "string 2", "string 3", "string 4" }; auto v = vector().push_tail(string(strs[0])) .push_tail(string(strs[1])) .push_tail(string(strs[2])) .push_tail(string(strs[3])); SHOULD_BE_EQ(v.tail(), string(strs[3]), "tail should equal last string"); SHOULD_BE_EQ((int) v.length(), 4, "vector should be 4 items long"); auto x = v.pop_tail(); SHOULD_BE_EQ(x.tail(), string(strs[2]), "tail should equal next to last string"); SHOULD_BE_EQ((int) x.length(), 3, "vector should be 3 items long"); }
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; }