typedef struct
棧的鏈式存儲結構稱爲鏈棧。
其插入和刪除操作僅限制在表頭位置上進行 。
由於只能在鏈表頭部進行操作,故鏈棧沒有必要象單鏈表那樣添加頭結點 。棧頂指針就是鏈表的頭指針。
elementtype x;
linkstack *P;
x = top->data;
P = top;
top = top->next;
free(P);
return x;
}
}
注意順序隊列多是循環隊列 ,這裏要注意幾點:
(1)front是隊頭的前一個位置 。
(2)尾部入隊,頭部出隊 。
(3)由於循環,任何的位置移動計算 之後要取餘:P = (P + 1) % MAXSIZE 。
#define MAXSIZE 100
void init_queue(seqqueue *Q)
{
Q->front = MAXSIZE - 1;
Q->rear = MAXSIZE - 1;
}
兩種方法的區別是第一種插入第一個元素是data[1],而第二種是data[0]。
判斷隊列是否爲空:
int queue_empty(linkqueue *Q)
{
if (Q->front == Q->rear)
return 1;
else
return 0;
}
取隊頭元素:
elementtype queue_front(linkqueue *Q)
{
if (queue_empty(Q))
error("隊列爲空!");
else
return Q->front->next->data;
}
入隊:
void Enqueue(linkqueue *Q, elementtype x)
{
node *P = (node *)malloc(sizeof(node));
P->data = x;
P->next = NULL;
Q->rear->next = P;
Q->rear = P;
}
elmenttype x;
if (Q->front->next == NULL) //只剩一個結點刪除後隊列爲空時的特殊情況,一定要注意處理
Q->rear = Q->front;
return x;
二叉樹的性質:
4.有n個結點的完全二叉樹(n>0)的深度爲[log2 n]+1([]爲取整)
datatype data;
struct node *lchild, *rchild;
} ordertree;
{
遍歷樹(森林)要轉換爲遍歷其對應的二叉樹:
先序遍歷:(同二叉樹的先序遍歷)
void preorder(tnode *T)
{
if (T != NULL)
{
visit(T);
preorder(T->firstchild);
preorder(T->nextbrother);
}
}
後序遍歷:(同二叉樹的中序遍歷)
void postorder(tnode *T)
{
if (T != NULL)
{
postorder(T->firstchild);
(這個權值可能比較少接觸,但是其實它非常重要,因爲我們平時設計的系統,判斷的結果常常都是通過長年的實踐會有一個出現機率分配,而不可能是平分的,比如考試,如果常常80-90分的比較多,也許就要換一種算法,當然這是後話,和考試無關了.)
其中弧表示單向關係 ,邊表示雙向關係 ,用離散數學中的術語來說,則分別表示爲非對稱關係和對稱關係。
#define e 8 /* 圖的邊(弧)數 */
建立一個無向網絡的算法:
CreateGraph(graph *G)
{
int i, j, k;
float w;
for (i=0; i<n; i++)
G->vexs[i] = getchar(); /* 讀入頂點信息,創建表,這裏用字符型 */
for (i=0; i<n; i++)
for (j=0; j<n; j++)
G->arcs[i][j] = 0; /* 鄰接矩陣初始化 */
for (k=0; k<e; k++)
{
scanf("%d%d%f", &i, &j, &w); /* 讀入邊(vi, vj)上的權w(暫用float類型) */
G->arcs[i][j] = w;
G->arcs[j][i] = w;
}
}
int v;
在一個數據表中,若某字段的值可以標識一個數據元素,則稱之爲關鍵字 (或鍵 )。
int i;
在待排序子表中完整地比較一遍以確定最大(小)元素,並將該元素放在子表的最前(後)面。
【注:可能發覺和冒泡法比較類似,但注意選擇法是全部比較一遍,找到最小元素的下標,再進行一次交換,而冒泡則是進行多次交換】
void select_sort(elementtype A[n])
{
int min, i, j;
elementtype temp;
for (i=0; i<n-1; i++)
{
min = i;
for (j=i+1; j<n; j++)
if (A[min].key > A[j].key) min = j;
if (min != i)
{
temp = A[i];
A[i] = A[min];
A[min] = temp;
}
}
}