第一篇:數據結構經典題目及c語言代碼總結
《數據結構》課程設計題目(程序實現采用C語言)
題目1:猴子選王(學時:3)
一堆猴子都有編號,編號是1,2,3...m,這群猴子(m個)按照1-m的順序圍坐一圈,從第1開始數,每數到第n個,該猴子就要離開此圈,這樣依次下來,直到圈中只剩下最后一只猴子,則該猴子為大王。
要求:m及n要求從鍵盤輸入,存儲方式采用向量及鏈表兩種方式實現該問題求解。
//鏈表
#include
typedef struct _RingNode
{
int pos;
struct _RingNode *next;}RingNode, *RingNodePtr;
// 創建約瑟夫環,pHead:鏈表頭指針,count:鏈表元素個數 void CreateRing(RingNodePtr pHead, int count){
RingNodePtr pCurr = NULL, pPrev = NULL;
int i = 1;
pPrev = pHead;
while(--count > 0)
{
pCurr =(RingNodePtr)malloc(sizeof(RingNode));
i++;
pCurr->pos = i;
pPrev->next = pCurr;
pPrev = pCurr;
}
pCurr->next = pHead;// 構成環狀鏈表 } void KickFromRing(RingNodePtr pHead, int n){
RingNodePtr pCurr, pPrev;
int i = 1;
// 計數
pCurr = pPrev = pHead;
while(pCurr!= NULL)
{
if(i == n)
{
// 踢出環
printf(“n%d”, pCurr->pos);
// 顯示出圈循序
pPrev->next = pCurr->next;
free(pCurr);
pCurr = pPrev->next;
i = 1;
}
pPrev = pCurr;
pCurr = pCurr->next;
if(pPrev == pCurr)
{
// 最后一個
printf(“nKing is %d”, pCurr->pos);
// 顯示出圈循序
free(pCurr);
break;
}
i++;
} }
int main(){
int n = 0, m = 0;
RingNodePtr pHead = NULL;
printf(“M(person count)= ”);
scanf(“%d”, &m);
printf(“N(out number)= ”);
scanf(“%d”, &n);
if(m <= 0 || n <= 0)
{
printf(“Input Errorn”);
return 0;
}
// 建立鏈表
pHead =(RingNodePtr)malloc(sizeof(RingNode));
pHead->pos = 1;
pHead->next = NULL;
CreateRing(pHead, m);// 開始出圈
printf(“nKick Order: ”);
KickFromRing(pHead, n);
printf(“n”);
system(“pause”);
return 0;}
//數組做:
#include
void SelectKing(int MonkeyNum, int CallNum);
void main(){
int MonkeyNum;
int CallNum;
/* 輸入猴子的個數 */
printf(“Monkey Num = ”);
scanf(“%d”, &MonkeyNum);
/* 輸入M的值 */
printf(“Call Num = ”);
scanf(“%d”, &CallNum);
SelectKing(MonkeyNum, CallNum);
}
void SelectKing(int MonkeyNum, int CallNum){
int *Monkeys;// 申請一個數組,表示所有的猴子;
int counter = 0;//計數,當計數為猴子個數時表示選到最后一個猴子了;
int position = 0;// 位置,數組的下標,輪流遍歷數組進行報數;
int token = 0;// 令牌,將報數時數到M的猴子砍掉;
// 申請猴子個數大小的數組,把桌子擺上。
Monkeys =(int *)malloc(sizeof(int)* MonkeyNum);
if(NULL == Monkeys)
{
printf(“So many monkeys, system error.n”);
return;
}
// 將數組的所有內容初始化為0,被砍掉的猴子設置為1
memset(Monkeys, 0, sizeof(int)*MonkeyNum);
// 循環,直到選中大王
while(counter!= MonkeyNum)
{
// 如果這個位置的猴子之前沒有砍掉,那么報數有效
if(Monkeys[position] == 0)
{
token++;// 成功報數一個,令牌+1,繼續報數直到等于M
// 如果報數到M,那么將這個猴子砍去
if(token == CallNum)
{
Monkeys[position] = 1;// 設置為1,表示砍去
counter++;// 計數增加
token = 0;// 設置為0,下次重新報數
// 如果是最后一個猴子,把它的位置打印,這個就是大王了
if(counter == MonkeyNum)
{
printf(“The king is the %d monkey.n”, position+1);
}
}
}
// 下一個猴子報數
position =(position + 1)%MonkeyNum;
}
// 釋放內存,開頭為所有猴子創建的桌子
free(Monkeys);
return;}
題目2 :字符逆轉(學時:3)
從鍵盤讀入一個字符串,把它存入一個鏈表(每個結點存儲1個字符),并按相反的次序將字符串輸出到顯示屏。
#include
struct node {
struct node *prev;
char c;
struct node *next;};struct node *input(struct node *top);int main(void){ struct node T,*top=&T,*bottom=&T,*p=NULL;T.prev=NULL;T.next=NULL;T.c=' 主站蜘蛛池模板: 亚洲熟妇色自偷自拍另类| 国产成人无码va在线观看| 一二三四视频社区在线| 国产一区二区三区免费高清在线播放| 国产精品国产自线拍免费不卡| 开心久久婷婷综合中文字幕| 精品熟女少妇av免费观看| 人人妻人人澡人人爽不卡视频| 欧美肥妇多毛bbw| 亚洲人成电影网站色| 亚洲女同一区二区| 中文无码天天av天天爽| 99久久久无码国产精品秋霞网| 亚洲精品国产suv| 人妻少妇乱子伦无码专区| 久久不见久久见免费视频7| 婷婷六月在线精品免费视频观看| 富婆如狼似虎找黑人老外| 一区二区三区国产| 国产精品成人免费视频一区| 亚洲中文字幕无码一区| a亚洲va欧美va国产综合| 国产真实迷奷在线播放| 狠狠色狠狠色综合日日五| 男女做爰猛烈啪啪吃奶动| 日韩精品久久久久久久电影蜜臀| 国产av偷闻女邻居内裤被发现| 精品无码久久久久久久久水蜜桃| 亚洲精品久久久打桩机| 亚洲午夜成人精品无码色欲| 色综合天天视频在线观看| 国产明星精品无码av换脸| 色噜噜狠狠一区二区三区果冻| 丰满人妻跪趴高撅肥臀| 久久精品免费国产大片| 国产精品成人午夜久久| 亚洲欧美另类精品二区| 欧美日韩一区二区免费视频| 日本久久久www成人免费毛片丨| 国产人妻鲁鲁一区二区| 下面一进一出好爽视频|