/**
* linklist.c
* version1.0 2006-9-20
* write by jsp
* 用鍊錶排序
**/#include "stdio.h"
#include "stdlib.h"
#include "string.h"
int count=0;
struct plist
;int findd(struct plist *p, char *id)
return 1;
}struct plist *creat(struct plist *head)
fflush(stdin);
printf("/t請輸入學生姓名:");
scanf("%s",pc->stuname);
fflush(stdin);
printf("/t請輸入學生學號:");
scanf("%s",id);
printf("/t請輸入學生成績:");
scanf("%d",&stur);
if((stur > 100) || (stur < 0))
pc->resoult = stur;
if(count > 0)
if(idd == 1 )
else
pc = null;
printf("/t是否要還要輸入(n退出):");
fflush(stdin);
scanf("%c",&yn);
if(tolower(yn) == 'n')
return head;
}return head;
}void creat1(struct plist *head)
while(yn != 'n')
pc->resoult = stur;
p = head;
idd = findd(p,id);
if(idd == 1 )
else
pc = null;
printf("/t是否要還要輸入(n退出):");
fflush(stdin);
scanf("%c",&yn);}}
struct plist * insert(struct plist *dislist)
pf = dislist;
idd = findd(pf,pc->stuid);
if (dislist == null)
else
else
pf->next = pc;
pc->next = null;
count++;
printf("/n*****==學號為%s的學生已經追加成功*****/n",pc->stuid);
}else
pc->next = pf->next;
pf->next = pc;
count++;}}
}return dislist;
}void modi(struct plist *dislist)
else
printf("/n*****=修改前該學生的情況*****/n");
printf("/t學號/t姓名/t成績/n");
printf("/t%s/t%s%/t%d/n",pf->stuid,pf->stuname,pf->resoult);
printf("/t請輸入新成績:");
scanf("%d",&modiresoult);
while((modiresoult < 0) ||(modiresoult> 100))
pf->resoult=modiresoult;
printf("/n*****=修改後該學生的情況*****/n");
printf("/t學號/t姓名/t成績/n");
printf("/t%s/t%s%/t%d/n",pf->stuid,pf->stuname,pf->resoult);}}
struct plist *del(struct plist *slist)
pb = slist;
pc= pb->next;
while(strcmp(pc->stuid,id)!=0)
printf("/n*****=要刪除的學生情況*****/n");
printf("/t學號/t姓名/t成績/n");
printf("/t%s/t%s%/t%d/n",pc->stuid,pc->stuname,pc->resoult);
pb->next = pc->next;
free(pc);
count--;
}return slist;
}void sort(struct plist *slist)
if(pb->next == null)
break;
pb=pb->next;
}if(pc->next == null)
break;
pc=pc->next;
if(pc->next == null)
break;
pb= pc->next;}}
void main()
else
break;
case 2:
dislist =slist;
sort(dislist);
dislist =slist;
total = 0;
i = 1;
printf("/t排名情況如下:/n");
printf("/t名次/t學號/t姓名/t成績/n");
while(dislist != null)
printf("/n/t人數%d人/t總%1.2f分/t平均%1.2f分/n",count,(float)total,(float)total/count);
break;
case 3:
dislist = slist;
modi(dislist);
break;
case 4:
slist=insert(slist);
break;
case 5:
slist=del(slist);
break;
case 6:
return;}}
}}
氣泡排序 陣列 鍊錶
對一組資料排序,例如 5 2 3 1 4 int flag 0,temp int s 10 定義陣列並賦值 for int i 0 i 10 i if flag 0 break 上述 外層迴圈控制迴圈的次數,最壞的情況下迴圈10次排序完成 內層迴圈控制比較個數 flag用來判斷是否發生交換,如果沒發...
快速排序(陣列和鍊錶版本)
快速排序 如果在陣列已經是公升序降序的情況下,可能會出現n 2 的複雜度,可在預先處理 樞紐元的選取也有多種方式 第乙個區間第乙個數字 區間最後乙個數字 區間第乙個數字,最後乙個數字,中間位置的數字,這三個數的中位數為做樞紐元,一般來說 第三種會會使快排的效率好些 時間複雜度 o nlogn 最壞情...
演算法講解 選擇排序 陣列鍊錶
陣列 使用陣列儲存item意味著所有item在記憶體中都是相連的。在陣列中儲存新的item可能很麻煩,because if 沒有了新空間,就得移動到記憶體的其他地方,因此新增新元素會很慢。陣列刪除元素也很麻煩,刪除元素後,必須將後面的元素前移。結決辦法1 預留空間。缺點 1 額外請求的位置可能用不上...