由于這兩天看了數(shù)據(jù)結(jié)構(gòu),所以又把大學(xué)所學(xué)的c語言和指針"掛"起來了。
創(chuàng)新互聯(lián)公司堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的加格達(dá)奇網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!本人菜鳥一枚請多多指教。下面是我這兩天學(xué)習(xí)的成果(數(shù)組和鏈表的實(shí)現(xiàn),用的是c語言哦!哈哈)。
(一)數(shù)組的實(shí)現(xiàn)和操作。代碼如下:
#include
#include
#include
struct Array{
int length;//數(shù)組長度
int * pBase;//存放數(shù)組首元素的地址
int cnt;//有效元素的個數(shù)
};
void init_arr(struct Array * pArray,int length);//初始化數(shù)組
bool append_arr(struct Array * pArray,int val);//向數(shù)組末尾添加元素
bool insert_arr(struct Array * pArray,int index,int val);//在數(shù)組的某個位置插入元素
bool delete_arr(struct Array * pArray,int index,int * deleteVal);//刪除數(shù)組某個位置的元素
int get(struct Array * pArray, int index);//獲取數(shù)組某個位置的元素
bool is_empty(struct Array * pArray);//判斷數(shù)組是否為空
bool is_full(struct Array * pArray);//判斷數(shù)組是否滿了
void sort_arr(struct Array * pArray);//對數(shù)組進(jìn)行排序
void show_arr(struct Array * pArray);//輸出數(shù)組元素
void inversion_arr(struct Array * pArray);//倒置數(shù)組元素
void main(void){
struct Array array;
int deleteVal;
init_arr(&array,6);
append_arr(&array,22);
append_arr(&array,-22);
//append_arr(&array,3);
insert_arr(&array,2,333);
append_arr(&array,1);
append_arr(&array,33);
append_arr(&array,1);
append_arr(&array,-2);
show_arr(&array);
if(delete_arr(&array,2,&deleteVal)){
printf("刪除的元素是%d\n",deleteVal);
}
show_arr(&array);
if(get(&array,4)!=-1){
printf("取出的元素為%d\n",get(&array,4));
}
sort_arr(&array);
show_arr(&array);
printf("-----\n");
inversion_arr(&array);
show_arr(&array);
}
//初始化數(shù)組
void init_arr(struct Array * pArray,int length){
pArray->pBase = (int *)malloc(sizeof(int)*length);
if(NULL == pArray->pBase){
printf("初始化數(shù)組失敗\n");
exit(-1);
}else{
pArray->cnt = 0;
pArray->length = length;
}
}
//判斷數(shù)組是否為空
bool is_empty(struct Array * pArray){
if(pArray->cnt == 0){
return true;
}else{
return false;
}
}
//判斷數(shù)組是否滿了
bool is_full(struct Array * pArray){
if(pArray->cnt == pArray->length){
return true;
}else{
return false;
}
}
//向數(shù)組末尾添加元素
bool append_arr(struct Array * pArray,int val){
if(!is_full(pArray)){
pArray->pBase[pArray->cnt]= val;
(pArray->cnt)++;
return true;
}
else{
//printf("數(shù)組已滿無法插入\n");
return false;
}
}
//輸出數(shù)組元素
void show_arr(struct Array * pArray){
if(is_empty(pArray)){
printf("數(shù)組為空\n");
}else{
for(int i=0;i
printf("%d\n",pArray->pBase[i]);
}
}
}
//在數(shù)組的某個位置插入元素
bool insert_arr(struct Array * pArray,int index,int val){
if(index>(pArray->cnt)+1 || index<=0 || index==pArray->length || is_full(pArray)){
return false;
}else{
for(int i=pArray->cnt-1;i>=index-1;i--){
pArray->pBase[i+1] = pArray->pBase[i];
}
pArray->pBase[index-1] = val;
pArray->cnt++;
return true;
}
}
//刪除數(shù)組某個位置的元素
bool delete_arr(struct Array * pArray,int index,int * deleteVal){
if(index<=0 || index>pArray->cnt || is_empty(pArray)){
return false;
}else{
*deleteVal = pArray->pBase[index-1];
for(int i = index;i
{
pArray->pBase[i-1] = pArray->pBase[i];
}
pArray->cnt--;
return true;
}
}
//獲取數(shù)組某個位置的元素
int get(struct Array * pArray,int index){
if(index<=0 || is_empty(pArray) || index > pArray->cnt){
return -1;
}else{
return pArray->pBase[index-1];
}
}
//對數(shù)組進(jìn)行排序
void sort_arr(struct Array * pArray){
if(is_empty(pArray)){
printf("此數(shù)組為空不能排序\n");
}else{
int t;
for(int i = 0;i
for(int j = i+1;j
if(pArray->pBase[j]
t = pArray->pBase[i];
pArray->pBase[i] = pArray->pBase[j];
pArray->pBase[j] = t;
}
}
}
}
}
//倒置數(shù)組元素
void inversion_arr(struct Array * pArray){
if(!is_empty(pArray) || !pArray->cnt ==1){
int i = 0;
int j = pArray->cnt-1;
int t;
while(i t = pArray->pBase[i]; pArray->pBase[i] = pArray->pBase[j]; pArray->pBase[j] = t; i++; j--; } } } 運(yùn)行結(jié)果如下: (二)鏈接的實(shí)現(xiàn)和操作。代碼如下: #include #include #include typedef struct Node{ int data; Node * pNext; }NODE,*PNODE; //初始化鏈表 PNODE createList(int); //遍歷鏈表 void traverse_list(PNODE); //判斷鏈表是否為空 bool is_empty(PNODE); //返回鏈表的長度 int length_list(PNODE); //向鏈表中插入節(jié)點(diǎn) bool insert_list(PNODE,int,int); //刪除某個節(jié)點(diǎn) bool delete_list(PNODE,int,int *); //為鏈表排序 void sort_list(PNODE); //主函數(shù) void main(void){ int leng; PNODE pHead; int val; printf("請您輸入鏈表的長度\n"); scanf("%d",&leng); pHead = createList(leng); //traverse_list(pHead); if(is_empty(pHead)){ printf("鏈表為空\n"); } //printf("鏈表的長度為%d\n",length_list(pHead)); //sort_list(pHead); insert_list(pHead,3,111); traverse_list(pHead); if(delete_list(pHead,3,&val)){ printf("刪除的節(jié)點(diǎn)為%d\n",val); } traverse_list(pHead); } //初始化鏈表 PNODE createList(int leng){ PNODE pHead; pHead = (NODE *)malloc(sizeof(NODE)); if(NULL == pHead){ printf("初始化鏈表失敗\n"); exit(-1); } PNODE pTail = pHead; pTail->pNext = NULL; for(int i=1;i<=leng;i++){ int val; PNODE pNew = (NODE *)malloc(sizeof(NODE)); printf("請輸入第%d個值:",i); scanf("%d",&val); pNew->data = val; pNew->pNext = NULL; pTail->pNext = pNew; pTail = pNew; } return pHead; } //遍歷鏈表 void traverse_list(PNODE pHead){ PNODE p = pHead; if(p->pNext == NULL){ printf("鏈表為空\n"); } while(p->pNext != NULL){ p = p->pNext; printf("%d\n",p->data); } } //判斷鏈表是否為空 bool is_empty(PNODE pHead){ if(pHead->pNext == NULL){ return true; }else{ return false; } } //返回鏈表的長度 int length_list(PNODE pHead){ PNODE p = pHead; int leng = 0; while(p->pNext != NULL){ p = p->pNext; leng++; } return leng; } //向鏈表中插入節(jié)點(diǎn) bool insert_list(PNODE pHead,int index,int val){ int i = 0; PNODE p = pHead; while(p->pNext!=NULL && i p = p->pNext;//p->1;p->2 i++;//1;2 } if(p->pNext == NULL || i>index-1){ return false; } PNODE pNew = (PNODE)malloc(sizeof(NODE)); if(pNew == NULL){ printf("初始化節(jié)點(diǎn)失敗\n"); exit(-1); } pNew->data = val; pNew->pNext = p->pNext; p->pNext = pNew; return true; } //刪除某個節(jié)點(diǎn) bool delete_list(PNODE pHead,int index,int * val){ int i = 0; PNODE p = pHead; while(p->pNext!=NULL && i p = p->pNext;//p->1;p->2 i++;//1;2 } if(p->pNext == NULL || i>index-1){ return false; } PNODE delNode = p->pNext; *val = delNode->data; p->pNext = delNode->pNext; free(delNode); return true; } //為鏈表排序 void sort_list(PNODE pHead){ int t,i,j; PNODE p,q; for(i=0,p = pHead;i for(j=i+1,q = p->pNext;j<=length_list(pHead);j++,q = q->pNext){ if(p->data > q->data){ t = p->data; p->data = q->data; q->data = t; } } } } 運(yùn)行結(jié)果如下: 另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
網(wǎng)頁名稱:c語言實(shí)現(xiàn)線性結(jié)構(gòu)(數(shù)組與鏈表)-創(chuàng)新互聯(lián)
標(biāo)題URL:http://weahome.cn/article/ddpjji.html