第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

求大神幫忙寫一個程序,急用,拜托了。11.15晚上之前要

求大神幫忙寫一個程序,急用,拜托了。11.15晚上之前要

C
小小雨點 2016-11-15 01:38:06
實驗一 ?線性表的應用實驗目的和要求:通過實驗進一步理解線性表的邏輯結(jié)構(gòu)和存儲結(jié)構(gòu),提高使用理論知識指導解決實際問題的能力,熟練掌握鏈表的實際應用。主要內(nèi)容:題目1?:問題描述:編號為1,2,…,n的n個人按順時針方向圍坐一圈,任選一個正整數(shù)作為報數(shù)上限值m,任選一個人(編號為k)開始按順時針方向自1開始順序報數(shù),報到m時停止報數(shù),報m的人出列,從他在順時針方向上的下一個人開始重新從1報數(shù),報到m時停止報數(shù),報m的人出列,如此下去,直到所有人全部出列為止。試設計一個程序求出出列順序?;疽螅豪脝蜗蜓h(huán)鏈表存儲結(jié)構(gòu)模擬此過程,按照出列的順序印出各人的編號。?
查看完整描述

2 回答

已采納
?
Yexiaomo

TA貢獻152條經(jīng)驗 獲得超157個贊

說一下思路,?
創(chuàng)建,?遍歷,?求長度...?略
主要是?viewList()?函數(shù)中的?那個?while()?循環(huán)有點繞,?本來想的是?,?當?計數(shù)?達到上限時,?就把這個值?輸出,?然后?將這個結(jié)點從鏈表中刪除
當寫寫發(fā)現(xiàn),?每個好的標志,?早知道就在結(jié)構(gòu)體中?多加一個?指示變量了,?(輸出過就?跳過,?沒有輸出過,?計數(shù)器?就加?1?)
這個還是有點麻煩的.?加了一個指針?永遠指向?所?刪除結(jié)點的?前面的那個結(jié)點,?
這樣寫,?還是有點不好的....



這是測試后代碼:

#include?<stdio.h>
#include?<stdlib.h>
#include?<malloc.h>

typedef?struct?Node{
	int?data;
	struct?Node?*pNext;
}?LNode,?*LIST;
/*函數(shù)聲明*/
LIST?createList();
void?traverseList(LIST?pHead);
int??ListLength(LIST?pHead);
void?viewList(LIST?pHead);

int?main(){
	LIST?List?=?createList();??//?創(chuàng)建?
	traverseList(?List?);????//?遍歷第一次?
	viewList(List);??????????????//?輸出?
	return?0;????????
}
/*?單循環(huán)鏈表的創(chuàng)建不用注釋了吧?*/?
LIST?createList()?{
	int?n,?i;
	LIST?pNew,?pHead,?pTail;?//定義頭結(jié)點,?尾結(jié)點?	
	pHead?=?(LIST)malloc(sizeof(LNode));
	if(pHead?==?NULL){
		exit(-1);
	}
	pTail?=?pHead;
	printf("輸入人數(shù):?");
	scanf("%d",?&n);
	for(i?=?0;?i?<?n;?++i){
		pNew?=?(LIST)malloc(sizeof(LNode));
		if(pHead?==?NULL){
			exit(-1);
		}
		pNew->data?=?i+1;
		
		pTail->pNext?=?pNew;
		pTail?=?pNew;//始終將新產(chǎn)生的結(jié)點作為尾結(jié)點?
	}
	
	pTail->pNext?=?pHead;
	
	return?pHead;
}
/*?遍歷?*/?
void?traverseList(LIST?pHead){
	LIST?p?=?pHead->pNext;
	while(p?!=?pHead){
		printf("%d?",?p->data);
		p?=?p->pNext;?
	}
	printf("\n");
	return?;
}
/*?求長度,??和遍歷差不多?*/?
int??ListLength(LIST?pHead){
	int?len?=?0;
	LIST?p?=?pHead->pNext;
	while(p?!=?pHead){
		
		++len;
		p?=?p->pNext;?
		
	}
	return?len;
}?
/*?這個是主要的?*/?
void?viewList(LIST?pHead){
	int?i?=?1;
	int?j?=?0;
	int?cnt?=?1;?//作為計數(shù)
	int?max;//最大上限
	
	//首先鏈表不能為空
	if(?pHead->pNext?==?pHead){
		return?;?
	}?
	//最大上限不能為小于?0?的數(shù)?
	printf("輸入報數(shù)最大上限為:?");
	scanf("%d",?&max);
	if(max?<=?0){
		printf("輸入報數(shù)最大上限值有誤,程序終止!!!\n?");
		exit(-1);
	}
		
	printf("\n");
	
	//人員編號不能超過實有人數(shù)?&&?不能為負?
	printf("輸入第一個報數(shù)的人員的編號:?");
	scanf("%d",?&j);
	if(j?<?1?||?j?>?ListLength(pHead)){
		printf("輸入第一個報數(shù)的人員的編號?有誤!!!\n?程序退出!");
		exit(-1)?;?
	}?
	
	//?將?p?指向第一個報數(shù)的員工?
	LIST?p?=?pHead->pNext;
	LIST?pp?=?pHead;//pp?永遠指向?p?指向的前面的那個結(jié)點?
	LIST?q;?//作為臨時存儲?需刪除的結(jié)點?
	while(p?!=?pHead){
		if(i?==?j)
			break;
		p?=?p->pNext;
		pp?=?pp->pNext;
?		++i;
	}?	
	
	/*??這個循環(huán)是重點?*/?
	while(?ListLength(pHead)?!=?0){		
		if(?cnt?!=?max?)?{
			p?=?p->pNext;
			pp?=?pp->pNext?;
			if(p?!=?pHead)
				++cnt;
		}?else?{
			printf("%d?",?p->data);
			q?=?p;
			p?=?p->pNext;
			pp->pNext?=?p;
			free(q);
			cnt?=?1;
		}	
	}	?
}

這是所有代碼, 包括垃圾代碼, 各種思路, 雖然不是很重要, 但我覺得還是有必要

#include?<stdio.h>
#include?<stdlib.h>
#include?<malloc.h>

#define?OK?1
#define?ERROR?0

typedef?struct?Node{
	int?data;
	struct?Node?*pNext;
}?LNode,?*LIST;

LIST?createList();
void?traverseList(LIST?pHead);
int??ListLength(LIST?pHead);
void?viewList(LIST?pHead);
void?deleteList(LIST?pHead,?int?pos);
	
int?main(){
	int?i;
	LIST?List?=?createList();
	traverseList(?List?);
//	for(i?=?1;??i?<=?11;?++i){
//		deleteList(List,?1);
//		traverseList(?List?);
//	}
	viewList(List);
	return?0;
}

LIST?createList()?{
	int?n,?i;
	LIST?pNew,?pHead,?pTail;?//定義頭結(jié)點,?尾結(jié)點?
	
	pHead?=?(LIST)malloc(sizeof(LNode));
	if(pHead?==?NULL){
		exit(-1);
	}
	pTail?=?pHead;
	printf("輸入人數(shù):?");
	scanf("%d",?&n);
	for(i?=?0;?i?<?n;?++i){
		pNew?=?(LIST)malloc(sizeof(LNode));
		if(pHead?==?NULL){
			exit(-1);
		}
		pNew->data?=?i+1;
		
		pTail->pNext?=?pNew;
		pTail?=?pNew;//始終將新產(chǎn)生的結(jié)點作為尾結(jié)點?
	}
	
	pTail->pNext?=?pHead;
	
	return?pHead;
}

void?traverseList(LIST?pHead){
	LIST?p?=?pHead->pNext;
	while(p?!=?pHead){
		printf("%d?",?p->data);
		p?=?p->pNext;?
	}
	printf("\n");
	return?;
}

int??ListLength(LIST?pHead){
	int?len?=?0;
	LIST?p?=?pHead->pNext;
	while(p?!=?pHead){
		
		++len;
		p?=?p->pNext;?
		
	}
	return?len;
}?

void?viewList(LIST?pHead){
	int?i?=?1;
	int?j?=?0;
	int?cnt?=?1;?//作為計數(shù)
	int?max;//最大上限
	
	//首先鏈表不能為空
	if(?pHead->pNext?==?pHead){
		return?;?
	}?
	//最大上限不能為小于?0?的數(shù)?
	printf("輸入報數(shù)最大上限為:?");
	scanf("%d",?&max);
	if(max?<=?0){
		printf("輸入報數(shù)最大上限值有誤,程序終止!!!\n?");
		exit(-1);
	}
		
	printf("\n");
	
	//人員編號不能超過實有人數(shù)?&&?不能為負?
	printf("輸入第一個報數(shù)的人員的編號:?");
	scanf("%d",?&j);
	if(j?<?1?||?j?>?ListLength(pHead)){
		printf("輸入第一個報數(shù)的人員的編號?有誤!!!\n?程序退出!");
		exit(-1)?;?
	}?
	
	//?將?p?指向第一個報數(shù)的員工?
	LIST?p?=?pHead->pNext;
	LIST?pp?=?pHead;//pp?永遠指向?p?指向的前面的那個結(jié)點?
	LIST?q;?//作為臨時存儲?需刪除的結(jié)點?
	while(p?!=?pHead){
		if(i?==?j)
			break;
		p?=?p->pNext;
		pp?=?pp->pNext;
?		++i;
	}?	
	while(?ListLength(pHead)?!=?0){		
		if(?cnt?!=?max?)?{
			p?=?p->pNext;
			pp?=?pp->pNext?;
			if(p?!=?pHead)
				++cnt;
		}?else?{
			printf("%d?",?p->data);
			q?=?p;
			p?=?p->pNext;
			pp->pNext?=?p;
			free(q);
			cnt?=?1;
		}	
	}	?
}
//void?deleteList(LIST?pHead,int?i)?/*?改變pHead?*/
//{?/*?刪除pHead的第i個元素?*/
//??LIST?p=pHead->pNext,q;?/*?p指向頭結(jié)點?*/
//??int?j=0;
//??if(?i?<=?0?||?i?>?ListLength(pHead)?)?/*?第i個元素不存在?*/
//????return?;
//??while(?j?<?i-1)?/*?尋找第i-1個結(jié)點?*/
//??{
//????p?=?p->pNext;
//????j++;
//??}
//??q=p->pNext;?/*?q指向待刪除結(jié)點?*/
//??p->pNext=q->pNext;
//
//??if(pHead==q)?/*?刪除的是表尾元素?*/
//????pHead=p;
//??free(q);?/*?釋放待刪除結(jié)點?*/
//??return?;
//}
//void?deleteList(LIST?pHead,?int?pos){
//????int?i?=?0;
//????LIST?p,?q;
//????p?=?pHead;
//????if(?i?>?pos-1?&&?i?>?ListLength(pHead))
//????????return;
//????while(?p->pNext?!=?pHead?&&?i?<?pos-1?)?{
//????????p?=?p->pNext;
//????????++i;
//????}
//????
//????q?=?p->pNext;
//????p->pNext?=?q->pNext;
//????
//????if(pHead->pNext==q)?/*?刪除的是表尾元素?*/
//????	pHead=p;
//??	free(q);?/*?釋放待刪除結(jié)點?*/
//????
//????return;?
//}


查看完整回答
2 反對 回復 2016-11-15
點擊展開后面3
?
慕數(shù)據(jù)5775487

TA貢獻76條經(jīng)驗 獲得超19個贊

這個真不會

查看完整回答
反對 回復 2016-11-15
  • 2 回答
  • 0 關注
  • 1562 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號