順序表的建立,插入,刪除,清空,銷毀,查詢,輸出功能
#include
#include
#include
#definetrue 1
#definefalse 0
#defineok 1
#defineerror 0
#defineinfeasible -1
#defineoverflow -2
typedefint status ;
typedefint elemtype ;
//線性表的動態分配順序儲存結構
#definelist_init_size 100 //線性表儲存空間的初始分配量
#definelistintcrement 10 //線性表儲存空間的分配增量
typedefstruct
elemtype *elem ; // 儲存空間基址
int length ; //當前長度
int listsize ; //當前分配的儲存容量
}sqlist;
//初始化順序表
statusinitlist_sq(sqlist &l)
l.elem = (elemtype * )malloc(list_init_size*sizeof(elemtype)) ;
if(!l.elem)
exit(overflow) ; //儲存空間分配失敗
l.length = 0 ; //空表長度為0
l.listsize = list_init_size ; // 初始儲存容量
return ok ;
voidcreatelist(sqlist&l) //建立順序表
int i;
printf("請輸入你要建立的順序表元素個數");
scanf("%d",&l.length);
printf("請輸入你要建立的順序表:\n");
for(i = 0 ; i < l.length ; i++)
scanf("%d" , &l.elem[i]) ;
//查詢
statuslocation( sqlist &l,elemtype e)//查詢元素的位置
int i = 0 ;
while(l.elem[i]!=e &&ii++;
if(i>l.length) return -1;
else return i+1;//因為c語言是從下標0開始的當i=0時實際上是順序表的第i+1個元素
//在順序表中第i個位置插入乙個新的元素e
statuslistinsert_sq(sqlist &l ,int i ,elemtype e)
elemtype *newbase,*q,*p;
if(i < 1 || i > l.length+1 )
return error ; // i不合法
if(l.length >= l.listsize)
//當前儲存空間已滿,增加分配
newbase = (elemtype *)realloc(l.elem , (l.listsize+listintcrement) * sizeof(elemtype)) ;
if(!newbase)
exit(overflow) ;// 分配位址失敗
l.elem = newbase ; //新基址
l.listsize +=listintcrement ; // 增加儲存容量
q = &(l.elem[i-1]) ; //q為插入位置
for(p = &(l.elem[l.length - 1]) ; p>= q ; --p )
*(p+1) = *p ;//插入位後的元素右移
*q = e ; //插入e
++l.length ; //表長加1
return ok ;
//在順序表中刪除第i個元素,並用e返回其值
statuslistdelete_sq(sqlist &l , int i , elemtype &e)
elemtype *q,*p;
if(i < 1 || i > l.length+1 )
return error ; // i不合法
p = &(l.elem[i-1]) ; //p為被刪除元素的位置
e = *p ;//被刪除元素的值賦給e
q = l.elem + l.length - 1 ;//表尾元素的位置
for(++p ; p <=q ; ++p)
*(p - 1) = *p ; //被刪除的元素之後的元素左移
--l.length ; //表長減1
return ok ;
//判斷表是否為空
statuslistempty(sqlist &l)
{ //如果l為空表,返回true,否則返回false
if(l.length==0)
printf("此表為空表\n");
return true ;
else return false;
//將表置空
void clearlist(sqlist &l)//將l重置為空表
for(int i = 0; i < l.length; i++)
l.elem[i] = null;
printf("表已經清空\n");
//銷毀表
voidburning_list(sqlist &l)
l.length = 0;
// free(l) ;
printf("表已經銷毀\n");
void print( sqlist &l)//輸出順序表
int i ;
for(i = 0 ; i < l.length ; i++)
printf("%3d" , l.elem[i]);
printf("\n") ;
voidmain()
sqlist la ;
int i , j ;
elemtype e ;
initlist_sq(la) ;
createlist(la) ;//建立表
//查詢
printf("請輸入要查詢的元素:\n") ;
scanf("%d" , &e) ;
j=location(la , e) ;
printf("該元素的位置為%d\n" , j) ;
//插入
printf("請輸入要插入的位置和元素:\n");
scanf("%d%d" , &i , &e) ;
listinsert_sq(la,i,e) ;
printf("輸出插入後的順序表:\n") ;
print(la) ;
//刪除
printf("請輸入要刪除的位置:\n") ;
scanf("%d" , &i) ;
listdelete_sq(la,i,e) ;
printf("刪除的那個元素是:%d\n" , e) ;
printf("輸出刪除後的順序表:\n") ;
print(la) ;
//清空
clearlist(la) ;
print(la) ;
//銷毀
burning_list(la) ;
print(la) ;
動態順序表的功能實現
在了解線性結構後我們知道它可分為順序表和煉表兩種,而順序表又分為靜態順序表 和動態順序表.靜態順序表和靜態通訊錄的實現極為相似,但是我們知道靜態版本有著明顯的缺陷,空間分配太大易造成浪費,太小又不便儲存,而動態版本正好可以解決這個問題。既然前面提到線性結構的組成,那麼我們就在說說鍊錶分為哪些 它可分...
C 順序表全功能實現
編譯環境 vs2008 pragma once include include include define max size 100 enum typedef int datatype typedef struct seqlist seqlistr int i,m,n 初始化,銷毀 void se...
順序表 簡單功能
ifndef seqlist h define seqlist h include include includeusing namespace std define elemtype int define seqlist default size 10 typedef struct seqlist...