原创 洛谷P1064金明的預算方案

題目傳送門 題目含義:總錢數m,物品總件數n。每個物品只能買一次,想要買附件必須買主件。求不超過總錢數的最大價值。 主件1與附件2、3、4的買法組合有:12、13、123、14、124、134、1234,可以把這些組合看作一個整體,每次從

原创 洛谷P1077擺花

題目傳送門 題目含義:每種花可以不擺,可以擺任意盆,但不能超過最大盆數。花的擺放順序按種類依次遞增,求擺花的方案數。 不同擺放方案主要依賴二維屬性的限制:一個是盆數,一個是種數。 所以狀態表示爲:f[i][j]是前i種花擺j盆的方案數。

原创 帶權路徑長度

int CalcWPL(BiTree T,int d){ static int wpl; if(!(T->lchild)&&!(T->rchild)){ wpl+=(T->weight)*d; } if(T->lchild)

原创 孩子兄弟鏈表

typedef struct CSTNode{ int data; struct CSTNode *firstchild,*nextsibling; }CSTNode,*CSTree; int height(CSTree T){

原创 二叉樹建樹與層次遍歷

typedef struct BiTNode{ char data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree; void CreateBiTree(BiTree &T){

原创 插入選擇冒泡快排歸併希爾--排序算法

void InsertSort(ElemType A[],int n){ for(int i=2;i<=n;i++){ if(A[i]<A[i-1]){ A[0]=A[i]; for(int j=i-1;A[j]<A[

原创 排序、平衡、線索、哈夫曼的一些概念

二叉排序樹: 1.若左子樹非空,左子樹所有結點的值均小於根結點的值 2.若右子樹非空,右子樹所有結點的值均大於根結點的值 3.左右子樹都是一棵二叉排序樹平衡二叉樹: 二叉排序樹的平均查找長度主要取決於樹的高度 爲避免樹的高度增長過快,降低

原创 樹的題目(二)

int CalcWPL(BiTree T,int d){ static int wpl; if(T->lchild==NULL&&T->rchild==NULL){ wpl+=(T->weight)*d; } if(T->l

原创 鏈表題目(二)

//判斷B是否爲A的子序列 int Match(LinkList A,LinkList B){ LinkList p=A->next,q=B->next,r=A->next; while(p!=NULL&&q!=NULL){

原创 頭插法與尾插法

void CreateList_Head(LinkList &L){ L=(LinkList)malloc(sizeof(LNode)); L->next=NULL; LinkList s;int x; scanf("%d",&

原创 鏈表查找插入刪除

typedef struct LNode{ int data; struct LNode* next; }LNode,*LinkList; bool GetElem(LinkList L,int i,int &x){ LinkL

原创 順序表的一些操作

#define MaxSize 50 typedef struct{ int data[MaxSize]; int length; }SqList; //二分查找(有序表)非遞歸 int BinarySearch(SqList

原创 樹的題目(一)

//求葉子結點數 int leaves(BiTree T){ if(!T)return 0; if(T->lchild==NULL&&T->rchild==NULL)return 1; return leaves(T->lchil

原创 判斷排序樹和平衡樹

int predata=-32767; int JudgeBST(BiTree T){ int b1,b2; if(T==NULL)return 1; else{ b1=JudgeBST(T->lchild); if(b1

原创 鏈表與順序表對比

1.可以隨機存取元素(通過首地址和元素序號可以在O(1)的時間內找到指定元素) 只能順序存取元素(按序號訪問的平均時間複雜度爲O(n))2.插入、刪除操作需要移動大量的元素 插入、刪除操作不需要移動元素,只需要修改指針3.邏輯上相鄰的兩個