用鍊錶排序 陣列的初級運用鍊錶實現

2021-04-09 05:48:14 字數 3138 閱讀 6487

/**

* 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 額外請求的位置可能用不上...