1.建表函式createsqlist:
定義建表函式createsqlist(list &l,int a,int n)
為l分配空間
for int i=0 to n-1
把陣列a的資料分別賦給l->data[i]
l->length=n;
2.輸出函式dispsqlist
定義輸出函式dispsqlist(list l)
定義count為0
for int i=0 to l->length-1
如果count=0
輸出l->data[i],count++
否則輸出空格加l->data[i]
3.刪除函式delsamenode
定義刪除delsamenode(list &l)
定義i,j=0;
定義陣列a[100],b[maxsize],left[maxsize];
初始化陣列a,b為0
for i=0 to l->length-1
a[l->data[i]]++;
for i=0 to l->length-1
如果a[l->data[i]]>1&&b[l->data[i]]!=0
a[l->data[i]]--;直接進行下一次迴圈
left[j]=l->data[i];
j++;
b[l->data[i]]++;
for i=0 to j-1
l->data[i]=left[i];
l->length長度賦值為j
第一次提交時答案錯誤,經除錯後發現,陣列沒有初始化導致答案錯誤,於是就寫了個初始化的**,提交後格式錯誤,想起我沒有控制末尾無空格,改了之後答案正確。
1.建鍊錶函式createsqlist:
定義函式createlist(list &l,int n)
為l分配空間,l->next置空
定義list型變數p,tail
定義int型變數i
tail=l;
for i=0 to n-1
為p分配空間
輸入p->data
tail->next=p;
tail=p;
p->next=null;//尾插法連線
2.列印鍊錶函式printlist
定義函式printlist(list l)
定義flag=0
如果l為空
輸出null
while(l)
如果flag為0
輸出l->data,flag++
否則輸出空格加l->data
l=l->next
3.逆置鍊錶函式reverselist
定義函式reverselist(list &l)
定義list型變數newhead=null,tail=null,p;
p=l->next
while(p)
tail=p->next;
p->next=newhead;
newhead=p;
p=tail;//逆置鍊錶,頭指標為newhead
newhead賦值給l
提交後發現鍊錶不空時格式錯誤,檢查**時發現沒有控制末尾無空格。
鍊錶結點定義:
typedef struct lnode
linklist,*list;
1.建鍊錶函式createlistr:
定義函式createlistr(list &l,int n)
為l分配空間,l->next置空
定義list型變數p,tail
定義int型變數i
tail=l;
for i=0 to n-1
為p分配空間
輸入p->data
tail->next=p;
tail=p;
p->next=null;//尾插法連線
2.列印函式displist
定義函式displist(list l,int n)
定義整型變數i
for i=1 to n
l=l->next
輸出l->data
3.求並集函式union
定義函式union(list s1,list s2,list &s3)
定義list型變數p,tail
為s3分配空間
tail=s3;
while(s1&&s2)//二路歸併求並集
如果s1->datadata
把s1->data連線進s3鍊錶中
否則把s2->data連線進s3鍊錶中
判斷s1,s2哪個還未遍歷完
未遍歷完的把餘下的數值都連線進s3鍊錶中
提交時部分正確,檢查**並除錯,輸入不同的例子去檢查,發現有些例子會出現錯誤,後來發現輸出函式的迴圈條件出現錯誤,是我看錯了題目的意思,改過來就正確了。
對於學習時間的安排我並沒有很明確的計畫,當有新的課堂派發布需要去預習的時候我就會去預習課本,每上完一節課後對於一些沒弄懂的知識,繼續去學習,爭取早一點把不懂的知識點解決。對於程式設計時間的安排,就是當有pta發布時,有空閒的時間我就會去做。對於自己的安排,我感覺還好。
選首領。n個遊戲者圍成一圈,從第乙個開始順序報數1,2,3.凡報到3者退出圈子,最後留在圈中的人為首領。
#include #include typedef struct nodenode,*linklist;
linklist create_list(int n)
/* 建立乙個節點數為n的單迴圈鍊錶,返回值為遊戲編號為1的節點的指標 */
head->code=1; head->next=head;
for(i=n;i>1;--i)
p->code=i; p->next=head->next; head->next=p;
}/*for*/
return head;
}/*create_list*/
void output(linklist head)/*輸出鍊錶中的節點的資料*/
while(p!=head);
printf("/n");
}/*output*/
void play(linklist head,int n)
/*if*/
else
}/*while*/
printf("/n%4d 是首領.",p->code); /*輸出最後留在圈子內的人的編號*/
}/*play*/
void main(void)
}
這個題目在上個學期也有做過,那就是猴子選大王那一道題目,以前是用陣列做的,現在這個程式是用鍊錶做的,感覺挺巧妙的,方法是建立乙個包含n個節點的單迴圈鍊錶來模擬n個人圍成的圈。節點的資料域存放遊戲者的編號。
在程式中,以刪除節點模擬人退出圈子的處理,整型變數c(初始值為1)用於計數,指標變數p的初始值為head,執行時,從p所指的節點開始計數,p沿煉表中的指標每次向後指乙個節點,c值隨p指標的移動相應地遞增。當c計數到2時,就刪除下乙個節點,然後將c置為0。為了避免將剩下的最後乙個節點刪除,另外設定乙個計數器k,其初值為參加遊戲的人數。每當刪除乙個節點時,k值就減1,當k等於1時,首領就選出來了。
部落格作業2 線性表
定義變數n存放順序表長度,i,j 0控制迴圈,l 1存放子列長度,k,m,max存放最大子列長度,flag存放最長子列陣列下標,sum 0求和 scanf d n int a n 存放母列 b 100000 存放子列長度 for i 0 to n 輸入母列 end for for i 1 to n ...
部落格作業2 線性表
定義整型變數i作為迴圈變數,j用來儲存所刪除節點的個數 for i小於順序表長度時執行迴圈 if 順序表中第i個數大於mind且小於maxd j 否則l data i j l data i 本題第一次提交時用了while迴圈語句,結果編譯器判定是段錯誤,後來改為for迴圈時提交答案正確。void c...
部落格作業2 線性表
for i 0 to length 1 if j大於等於i length為k 剛開始把重新賦值的 放在了第二個for裡面。linklist p l 用p代替l while p next不為0 if m為0或者大於n 不存在返回 1 while j小於n m 1且p不為0 if p為0 返回 1 否則...