直接插入
冒泡排序
選擇排序
二分查找
int BinSearch(SeqList R,KeyType K)
{
int low=1,high=n,mid;
while(low<=high)
{
mid =(low+high)/2;
if(R[mid].key==K) return mid;
if(R[mid].key>K)
high = mid -1;
else
low = mid +1;
}
}
順序查找
二叉樹
線性表
鏈表
2.設順序表L是一個遞增有序表,試寫一個函數,將x插入L中,並使L仍是一個有序表。
順序表的結構定義如下:
#define TRUE 1
#define FALSE 0
typedef int datatype; /*定義表元素類型*/
#define maxsize 1024 /*線性表的最大長度*/
typedef struct
{ datatype elem[maxsize];/*存放表結點的數組*/
int length; /*表長*/
}sequenlist;
參考程序:
int Insert(sequenlist *L,datatype x)
{
if(L->length==maxsize)
return FALSE;
int i=L->length-1;
while(i>=0 && x<L->elem[i])
{L->elem[i+1]=L->elem[i];
i--;
}
L->elem[i+1]=x;
L->length++;
return TRUE;
}
5. 設帶頭節點的單鏈表L是一個遞增有序表,試寫一個函數,將x插入L中,並使L仍是一個有序表。
參考答案:
typedef struct LNode{
Elemtype data;
struct LNode* next;
} LinkList;
LinkList* Insert(LinkList *L,datatype x)
{LinkList *p,*q,*t;
t=(LinkList*)malloc(sizeof(LinkList));
if(!t)
return NULL;
t->data=x;
p=L->next;
q=L;
while(p!=NULL && x>p->data)
{q=p;//q指向p的前驅結點
p=p->next;
}
q->next=t;
t->next=p;
return L;
}