在了解線性結構後我們知道它可分為順序表和煉表兩種,而順序表又分為靜態順序表
和動態順序表.
靜態順序表和靜態通訊錄的實現極為相似,但是我們知道靜態版本有著明顯的缺陷,空間分配太大易造成浪費,太小又不便儲存,而動態版本正好可以解決這個問題。
既然前面提到線性結構的組成,那麼我們就在說說鍊錶分為哪些:它可分為
單向鍊錶,雙向鍊錶,迴圈鏈
表和雙向迴圈鍊錶,這些我們後期再討論這些。好了,該回到今天的主題上來了——動態順序表的實現!
首先,動態順序表的功能在標頭檔案中已經全部列出來了,在排序的時候給出了三種方式:氣泡排序,直接插入排序和選擇排序。在實現測試函式的時候記得列印選單中的順序需要和case語句中的順序保持一致哦,我在這就栽過跟頭。。。還值得注意的是:在我們的測試函式中,應當建立乙個結構體變數,然後呼叫函式的時候把其位址傳進去,否則傳值的話會有壓棧的開銷,這樣一來時間和空間就都浪費很大了。
下來我們就用**實現它:
seqlist.h
#define _crt_secure_no_warnings 1
#ifndef _seqlist_d_h_
#define _seqlist_d_h_
#include#include#include#define default_sz 2
#define inc_sz 2
typedef int datatype;
typedef struct seqlist
seqlist,*pseqlist;
void printseqlist(pseqlist pseq); //順序表列印輸出
void initseqlist(pseqlist pseq); //進行初始化
void destroyseqlist(pseqlist pseq);
void pushback(pseqlist pseq,datatype x);//在順序表尾部插入元素
void popback(pseqlist pseq); //在順序表尾部刪除元素
void pushfront(pseqlist pseq,datatype x);//在順序表頭部插入元素
void popfront(pseqlist pseq); //在順序表頭部刪除元素
void insert(pseqlist pseq,int pos,datatype x);//在順序表指定位置插入元素
void erase(pseqlist pseq,datatype pos); //在指定位置刪除該元素
void remove(pseqlist pseq,datatype x); //刪除指定元素
void removeall(pseqlist pseq,datatype x); //刪除所有指定的元素
void bubblesort(pseqlist pseq); //氣泡排序
void insertionsort(pseqlist pseq); //直接插入排序
void selectsort(pseqlist pseq); //選擇排序
int binarysearch(pseqlist pseq,datatype x); //二分查詢
#endif
seqlist.c
#include"seqlist.h"
void printseqlist(pseqlist pseq) //順序表列印輸出
}void initseqlist(pseqlist pseq) //進行初始化
pseq->sz=0;
pseq->capacity=0;
memset(pseq->data,0,default_sz*sizeof(datatype));
}void destroyseqlist(pseqlist pseq)
void check_capacity(pseqlist pseq)
pseq->data=tmp;
pseq->capacity+=inc_sz; }}
void pushback(pseqlist pseq,datatype x) //在順序表尾部插入元素
void popback(pseqlist pseq) //在順序表尾部刪除元素
pseq->sz--;
}void pushfront(pseqlist pseq,datatype x) //在順序表頭部插入元素
pseq->data[0]=x;
pseq->sz++;
}void popfront(pseqlist pseq) //在順序表頭部刪除元素
for(i=0;isz;i++)
pseq->sz--;
}void insert(pseqlist pseq,int pos,datatype x) //在順序表指定位置插入元素
pseq->data[pos]=x;
pseq->sz++;
}void erase(pseqlist pseq,datatype pos) //在順序表指定位置刪除元素
for(i=pos;isz-1;i++)
pseq->sz--;
}void remove(pseqlist pseq,datatype x) //刪除指定元素
for(i=ret;isz;i++)
pseq->sz--;
}void removeall(pseqlist pseq,datatype x) //刪除所有指定的元素
for(i=ret;isz;i++)
pseq->sz--;
ret++; }}
void bubblesort(pseqlist pseq) //氣泡排序
} if(flag==0)
m=k; //將k設定為最後一次交換的位置 }}
void insertionsort(pseqlist pseq) //直接插入排序
pseq->data[j+1]=tmp; }}
void selectsort(pseqlist pseq) //選擇排序
if(min!=i)
} }}
int binarysearch(pseqlist pseq,datatype x) //二分查詢
else
return mid; //返回要查詢值的下標,否則要查詢的可能也為-1
} return -1;
}
test.c
#include "seqlist.h"
void menu()
void test()
else
printf("查詢失敗!\n");
}if(ret==-1)
break;
case 14:
destroyseqlist(&seq);
break;
case 15:
printf("請輸入要刪除元素的位置:");
scanf("%d",x);
erase(&seq,x);
default:
printf("輸入錯誤!");
break;
} }}int main()
順序表的功能實現
順序表的建立,插入,刪除,清空,銷毀,查詢,輸出功能 include include include definetrue 1 definefalse 0 defineok 1 defineerror 0 defineinfeasible 1 defineoverflow 2 typedefint ...
動態順序表的實現
寫這篇部落格主要是講述一下動態順序表的實現,其中包含 列印 建立 銷毀 尾部插入 尾部刪除 頭部插入 頭部刪除 在順序表的pos位置上插入元素x 刪除順序表pos位置上的元素 順序表中查詢資料x,返回該元素在順序表中的位置 修改pos位置的資料 氣泡排序 選擇排序 查詢已排序順序表中的元素x 等操作...
動態實現順序表
順序表是在計算機記憶體中以 陣列的形式儲存的線性表,是指用一組位址連續的 儲存單元 依次儲存 資料元素 的線性結構。線性表採用順序儲存的方式儲存就稱之為順序表。順序表是將表中的結點依次存放在計算機記憶體中一組位址連續的 儲存單元中。下面來進行順序表的動態實現 標頭檔案 ifndef seqlist ...