簡單鍊錶 未完善

2021-09-12 02:00:50 字數 4433 閱讀 7063

無序:與輸入一致

#include#includeusing namespace std;

struct list;

list *head,*tail;//head頭指標是個哨兵,無實際元素,tail尾指標也是哨兵,但有實際元素

void creat_list(int n)

tail=p;

return;

}void print(list *head)

list *p=head->next;

while(p!=null)

printf("\n");

}list* find(int x)

return p;

}void insert(int value)

int insert1(int x,int value)

if(p==null) return -1;

else if(p->value==x)

}int delete_list(int value)

else

} head->length-=sign;

return sign;

}int delete_list1(int location)

pre->next=p->next;

temp=p;

p=p->next;

free(temp);

head->length--;

return 1;

}void reverse()

tail=p;

while(p!=null)

tail->next=null;

head->next=pre;

}int main()

有序鍊錶,非遞減

#include#includeusing namespace std;

struct list;

list *head,*tail;//head頭指標是個哨兵,無實際元素,tail尾指標也是哨兵,但是有實際元素

void creat_list(int n)

else

else

tem->next=p;

pre->next=tem;}}

} return;

}void print(list *head)

while(p!=null)

printf("\n");

}void insert(int value)

temp=(list*)malloc(sizeof(list));

temp->value=value;

pre->next=temp;

temp->next=p;

head->length++;

}int delete_list(int value)

else

}head->length-=sign;

return sign;

}int delete_list1(int location)

pre->next=p->next;

temp=p;

p=p->next;

free(temp);

head->length--;

return 1;

}void reverse()

tail=p;

while(p!=null)

tail->next=null;

head->next=pre;

}int main()

注:鍊錶還有一種插入和建立鍊錶的方法,每當放入乙個新的元素,插到head頭指標的後面,與輸入逆序。

單鏈表常見面試題:

迴圈鍊錶(無序版):

#include#includeusing namespace std;

struct list;

list *head,*tail,*pre_tail;

/*head頭指標是個哨兵,無實際元素,tail尾指標也是哨兵,同樣無實際元素

pre_tail指標為tail的直接前驅,方便進行直接插入尾部操作

*/void creat_list(int n)

pre_tail=p;

return;

}void print(list *head)

list *p=head->next;

while(p!=tail)

printf("\n");

}list* find(int x)

return p;

}void insert(int value)

int insert1(int x,int value)

if(p==tail) return -1;

else if(p->value==x)

}int delete_list(int value)

else

} head->length-=sign;

return sign;

}int delete_list1(int location)

pre->next=p->next;

temp=p;

p=p->next;

free(temp);

head->length--;

return 1;

}void reverse()

while(p!=tail)

tail->length=head->length;

p->next=pre;

head->next=tail;

temp=head;

head=tail;

tail=temp;

}int main()

雙向鍊錶:

#include#includeusing namespace std;

struct list;

list *head,*tail;

/*head頭指標是個哨兵,無實際元素,tail尾指標也是哨兵,同樣無實際元素

*/void creat_list(int n)

return;

}void print(list *head)

list *p=head->next;

while(p!=tail)

printf("\n");

}list* find(int x)

return p;

}void insert(int value)

int insert1(int x,int value)

if(p==tail) return -1;

else if(p->value==x)

}int delete_list(int value)

else

p=p->next;

} head->length-=sign;

return sign;

}int delete_list1(int location)

p->pre->next=p->next;

p->next->pre=p->pre;

free(p);

head->length--;

return 1;

}void reverse()

while(p!=tail)

tail->length=head->length;

tail->next=tail->pre;

tail->pre=head;

temp=head;

head=tail;

tail=temp;

}int main()

鍊錶運用:

一、多項式相加的演算法實現

#include#includeusing namespace std;

typedef struct polylpoly;

void scan(lpoly *pa,lpoly *pb)

p=pb;

for(int i=0;i>coef>>exp;

t->coef=coef;

t->exp=exp;

t->next=null;

p->next=t;

p=p->next; }}

lpoly *add_poly(lpoly *pa,lpoly *pb)

else

p=p->next;

q=q->next;

} else if(p->exp>q->exp)

else

} if(p==null) r->next=q;

else r->next=p;

return pa;

} print(lpoly *head)

cout<}int main()/*4

6 13 2 10 -5 4 14 0

5 13 3 11 8 6 5 4

*/

c 逆序數 未完善

思路 1.笨方法 o n 2 2.分治 o nlogn 1 將陣列分成兩份 求兩部分的逆序數 2 再算有多少逆序是從左邊選擇乙個逆序,再從右邊選擇乙個逆序組成的。o n 求全排列的逆序數 include using namespace std intmergeaccount int a,int le...

Flask 懶人版分頁(未完善)

後端code 後端import math class basicview baseview expose defindex self 每頁展示多少條 page count 20 查詢資料中一共 有多少條 tcount session.query 表名 count 可以分成多少頁 totalpage ...

靜態鍊錶的實現 部分完善

舉個例子 假設max size 3 那麼初始化之後 陣列的cur情況就是 space 0 cur 1,space 1 cur 2,space 2 cur 0 當插入乙個節點後則陣列的cur情況就變成了 space 0 cur 2,space 1 cur 0,space 2 cur 1 因為只有乙個空...