掌握數(shù)據(jù)結(jié)構(gòu)是編寫(xiě)出地道、復(fù)雜程序的基礎(chǔ)。很難想象一個(gè)不懂數(shù)據(jù)結(jié)構(gòu)的人,或是不夠精通數(shù)據(jù)結(jié)構(gòu)的人會(huì)是一個(gè)出色的程序員。因此多用數(shù)據(jù)結(jié)構(gòu)的知識(shí)編寫(xiě)一些程序?qū)ε囵B(yǎng)人們的編程水平以及用計(jì)算機(jī)處理復(fù)雜問(wèn)題的能力都大有裨益。本章將通過(guò)一些具體的實(shí)例介紹數(shù)據(jù)結(jié)構(gòu)在程序設(shè)計(jì)中的應(yīng)用。
題目要求:
編寫(xiě)一個(gè)函數(shù),實(shí)現(xiàn)順序表的就地逆置,也就是說(shuō)利用原表的存儲(chǔ)空間將順序表(a1,a2,…an)逆置為(an,an-1,…a1)。
題目分析:
本題主要考查順序表線(xiàn)性結(jié)構(gòu)的應(yīng)用。順序表的基本操作包括順序表的創(chuàng)建,插入數(shù)據(jù),刪除數(shù)據(jù)等。但是在實(shí)際的應(yīng)用中,對(duì)順序表的操作并不僅限于上述這幾種操作。因此學(xué)習(xí)順序表也不能僅限于學(xué)懂前面所講的幾種操作而已,應(yīng)當(dāng)靈活掌握順序表結(jié)構(gòu),并能夠熟練地操縱順序表。
#include “stdio.h”# define MAXSIZE 10 /*靜態(tài)順序表的最大空間*/typedef struct{ int * base; int length;}sqlist ; /*定義一個(gè)順序表類(lèi)型*/reverseSQ(sqlist *l){/*實(shí)現(xiàn)順序表l的就地逆置*/ int low = 0 , high = l->length – 1;/*low和high分別指向順序表的首尾*/ int buf , i; for(i=0;ilength/2;i++) { /*循環(huán)length/2次,實(shí)現(xiàn)數(shù)據(jù)逆置*/ buf = l->base[low] ; l->base[low] = l->base[high]; l->base[high] = buf; low++; high–; }}main(){ sqlist l; int a , i = 0; /*創(chuàng)建一個(gè)順序表*/ l.base = (int *)malloc(sizeof(int)*MAXSIZE); l.length = 0; /*輸入數(shù)據(jù)*/ printf(“Please input below 10 integer into the sqlist”) ; printf(“Type -1 for stopping input”); scanf(“%d”,&a); while(a != -1 && i<=9) { l.base[i] = a; l.length++;i++;if(i <10){scanf("%d",&a);} } /*輸出原順序表中的數(shù)據(jù)*/ printf("The contents of the sqlist are"); for(i=0;i<l.length;i++) printf("%d ",l.base[i]); printf(""); reverseSQ(&l); /*就地逆置順序表*/ /*輸出逆置后的順序表中的數(shù)據(jù)*/ printf("The contents of the reversed sqlist are"); for(i=0;i<l.length;i++) printf("%d ",l.base[i]); getche();}
運(yùn)行結(jié)果:
運(yùn)行結(jié)果