#include<stdio.h>
#include<stdlib.h>
#define list_init_size 5
#define listincrement 10
#define overflow -2
typedef int status;
typedef int elemtype;
typedef struct
{
elemtype *elem;
int length;
int listsize;
} sqlist;
status initlist_sq(sqlist &L)
{
L.elem=(elemtype *)malloc(list_init_size * sizeof(elemtype));
if(!L.elem) exit(overflow);
L.length=0;
L.listsize=list_init_size;
return 1;
}
將順序表初始化為5個元素,在結構中定義了順序表的長度,int length:所以在主函數中可以直接調用用printf("%d",L.length)就得到了當前的長度,無論是刪除,添加,L.length都會隨著改變,比如我們建一個添加的函數
status listinsert_sq(sqlist &L, int i ,elemtype e)
{
int * q , *p ,* newbase;
if(i<1 || i>L.length + 1) return 0;
if(L.length >= L.listsize)
{
newbase=(elemtype *)realloc(L.elem,(L.listsize+listincrement) * sizeof(elemtype));
if(!newbase) exit (overflow);
L.elem=newbase;
L.listsize+=listincrement;
}
q=&(L.elem[i-1]);
for(p=&(L.elem[L.length-1]) ;p>=q ;--p)
*(p+1) = *p;
*q = e;
++L.length;
return 1;
}
如果加一個元素,就會把L.length自動加1,這樣避免了再寫函數求表長
② 順序存儲的有序線性表 有序線性鏈表
「順序存儲」表明該線性表使用順序存儲結構(即數組)
「有序」表明線性表內元素排列有序,如「1,2,3,4,5」
「鏈表」表明該線性表採用鏈式存儲結構,即每個元素的數據類型都是一個結構體,這個結構體裡面又包含指向下一個位置的結構體的地址
順序存儲結構的線性表的類型定義如下:
#define
MAXSIZE
100
‖順序表的最大容量
typedef
struct
{ElemType
data[MAXSIZE];
‖存放線性表的數組
int
last;
‖last是線性表的長度
}SeqList;
鏈式存儲線性表的結點定義:
typedef
struct
Node
{ElemType
data;
struct
Node
*next;
}LNode,*LinkedList;
③ 線性表 - 順序存儲結構 - 順序表
順序表
順序表的定義
( ) 順序存儲方法
即把線性表的結點按邏輯次序依次存放在一組地址連續的存儲單元里的方法
( ) 順序表(Sequential List)
用順序存儲方法存儲的線性表簡稱為順序表(Sequential List)
結點a i 的存儲地址
不失一般性 設線性表中所有結點的類型相同 則每個結點所佔用存儲空間大小亦相同 假設表中每個結點佔用c個存儲單元 其中第一個單
元的存儲地址則是該結點的存儲地址 並設表中開始結點a 的存儲地址(簡稱為基地址)是LOC(a ) 那麼結點a i 的存儲地址LOC(a i
)可通過下式計算
LOC(a i )= LOC(a )+(i )*c ≤i≤n
注意
在順序表中 每個結點a i 的存儲地址是該結點在表中的位置i的線性函數 只要知道基地址和每個結點的大小 就可在相同時間內求出任一結
點的存儲地址 是一種 隨機存取結構
順序表類型定義
#define ListSize //表空間的大小可根據實際需要而定 這里假設為
typedef int DataType; //DataType的類型可根據實際情況而定 這里假設為int
typedef struct {
DataType data[ListSize];//向量data用於存放表結點
int length;//當前的表長度
}SeqList;
注意
① 用向量這種順序存儲的數組類型存儲線性表的元素外 順序表還應該用一個變數來表示線性表的長度屬性 因此用結構類型來定義順序表類
型
② 存放線性表結點的向量空間的大小ListSize應仔細選值 使其既能滿足表結點的數目動態增加的需求 又不致於預先定義過大而浪費存儲
空間
③ 由於C語言中向量的下標從 開始 所以若L是SeqList類型的順序表 則線性表的開始結點a 和終端結點a n 分別存儲在L data[ ]和
L Data[L length ]中
④ 若L是SeqList類型的指針變數 則a 和a n 分別存儲在L >data[ ]和L >data[L >length ]中
順序表的特點
順序表是用向量實現的線性表 向量的下標可以看作結點的相對地址 因此順序表的的特點是邏輯上相鄰的結點其物理位置亦相鄰
lishixin/Article/program/sjjg/201311/23579
④ 求數據結構試驗 線性表的順序存儲結構
#include<iostream.h>
#include<stdlib.h>
#include <malloc.h>
#define OVERFLOW 0
#define OK 1
#define ERROR 0
#define LIST_INIT_SIZE 100//線性表存儲空間的初始增量
#define LISTINCREMENT 10 // ?
typedef struct{
int * elem;// 存儲空間基址
int length;//當前長度
int listsize;//當前分配的存儲容量
}SqList;
SqList L;
int InitList_Sq(SqList & L){
//構造一個新的線性表。
L.elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int));
if(!L.elem)exit(OVERFLOW);//存儲容量失敗
L.length=0; //空表長度為0
L.listsize=LIST_INIT_SIZE;//存儲初始容量
return OK;
}//InitList_Sq
int LIstInsert_Sq(SqList & L,int i,int e){
//在順序線性表L中第i位置之前插入新的元素e
if(i<1||i>L.length+1) return ERROR;
if(L.length>=L.listsize){
int * newbase=(int *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(int));
if(!newbase)exit(OVERFLOW);
L.elem=newbase;
L.listsize+=LISTINCREMENT;
}
int * q=&(L.elem[i-1]);
for(int * p=&(L.elem[L.length-1]);p>=q;--p)*(p+1)=*p;
*q=e;
++L.length;
return OK;
}
int ListDelete_Sq(SqList&L,int i,int &e)
{
if((i<1)||(i>L.length))return ERROR;
int *p=&(L.elem[i-1]);
e=*p;
int *q=L.elem+L.length-1;
for(++p;p<=q;++p)*(p-1)=*p;
--L.length;
return OK;
}
void main()
{
SqList L;
int i,n;
int e;
cout<<"輸入順序表的個數:"<<endl;
cin>>n;
int *p=(int *)malloc(n*sizeof(int));
InitList_Sq(L);
cout<<"輸入線性表"<<n<<"個元素的值"<<endl;
for(i=0;i<n;i++)
{
cin>>p[i];
L.elem[i]=p[i];
}
cout<<endl;
L.length=i;
cout<<endl;
cout<<"輸入要插入元素的值"<<endl;
cin>>e;
cout<<endl;
cout<<"輸入要插入的位置"<<endl;
cin>>i;
LIstInsert_Sq( L, i, e);
for(i=0;i<n+1;i++)
cout<<L.elem[i];
cout<<endl;
cout<<"輸入要刪除的位置"<<endl;
cin>>i;
ListDelete_Sq(L,i,e)
;for(i=0;i<n;i++)
cout<<L.elem[i];
free(p);
⑤ 1、線性表順序存儲方式操作2、線性表鏈式存儲方法操作:。兩個都用c語言
下面是從我的博客裡面給你找的,你參考一下。更多的數據結構的內容,也可以去看我的博客。
/************************************************************
說明:
1、主函數內的代碼是為了測試方便,可以自行修改。
2、宏定義NEWS是人機交互信息提示,若不需要,可修改為0。
3、若是windows系統,請將258行中的clear修改為cls。
4、在輸入數據後,請多按一下回車,實現清屏。
環境:ubuntu12.04LTS、codeblocks10.05、2014-04-02
************************************************************/
#include<iostream>
#include<stdlib.h>
#include<malloc.h>
#include<cstring>
#defineNEWS1
#defineLIST_INIT_SIZE100
#defineLIST_ADD_SIZE10
#defineNEW_SIZE(L->list_size+LIST_ADD_SIZE)
usingnamespacestd;
typedefintElem_Type;
typedefstruct
{
Elem_Type*data;//元素
intlen;//長度
intlist_size;//空間
}Sq_List;
typedefenum
{
OK=0,//正常
ERROR=-1,//邏輯異常
OVER=-2//內存異常
}Status;
/******************************
函數名:Init_List
功能:構造、初始化線性表
******************************/
Sq_List*Init_List(void)
{
Sq_List*L=(Sq_List*)malloc(sizeof(Sq_List));
if(!L)
exit(OVER);
L->data=(Elem_Type*)malloc(LIST_INIT_SIZE*sizeof(Elem_Type));
if(!L->data)
exit(OVER);
L->len=0;
L->list_size=LIST_INIT_SIZE;
#if(NEWS)
cout<<"構造成功,已初始化"<<endl;
#endif
returnL;
}
/******************************
函數名:Destroy_List
功能:銷毀線性表
******************************/
StatusDestroy_List(Sq_List*L)
{
free(L);
#if(NEWS)
cout<<"銷毀成功,請不要再使用"<<endl;
#endif
returnOK;
}
/******************************
函數名:Clear_List
功能:清空線性表
******************************/
StatusClear_List(Sq_List*L)
{
memset(L->data,-1,sizeof(L->data));
L->len=0;
#if(NEWS)
cout<<"已全部清空"<<endl;
#endif
returnOK;
}
/******************************
函數名:Empty_List
功能:判斷線性表是否為空
******************************/
boolEmpty_List(Sq_List*L)
{
returnL->len==0;
}
/******************************
函數名:Length_List
功能:獲取線性表長度
******************************/
intLength_List(Sq_List*L)
{
returnL->len;
}
/******************************
函數名:Get_Elem_List
功能:指定位置獲取元素
******************************/
StatusGet_Elem_List(Sq_List*L,intindex,Elem_Type*e)
{
if(!(1<=index&&index<=Length_List(L)))
#if(NEWS)
{
cout<<"獲取位置不合法"<<endl
<<"下面顯示的數據是上次輸入的num的值,請注意!!!"<<endl;
returnERROR;
}
#else
returnERROR;
#endif
*e=L->data[index-1];
returnOK;
}
/******************************
函數名:Insert_List
功能:指定位置插入元素
******************************/
StatusInsert_List(Sq_List*L,intindex,Elem_Typee)
{
if(!(1<=index&&index<=Length_List(L)+1))
#if(NEWS)
{
cout<<"插入位置不合法"<<endl;
returnERROR;
}
#else
returnERROR;
#endif
if(Length_List(L)>=L->list_size)
#if(NEWS)
cout<<"剛才增加了存儲空間"<<endl;
#endif
L->data=(Elem_Type*)realloc(L->data,NEW_SIZE*sizeof(Elem_Type));
if(!L->data)
exit(OVER);
L->list_size+=LIST_ADD_SIZE;
for(inti=Length_List(L);i>=index-1;i--)
L->data[i+1]=L->data[i];
L->data[index-1]=e;
L->len++;
#if(NEWS)
cout<<"插入成功"<<endl;
#endif
returnOK;
}
/******************************
函數名:Delete_List
功能:指定位置刪除元素
******************************/
StatusDelete_List(Sq_List*L,intindex,Elem_Type*e)
{
if(Empty_List(L)||!(1<=index&&index<=Length_List(L)))
#if(NEWS)
{
cout<<"刪除位置不合法or目前是空表"<<endl;
returnERROR;
}
#else
returnERROR;
#endif
*e=L->data[index-1];
for(inti=index;i<Length_List(L);i++)
L->data[i-1]=L->data[i];
#if(NEWS)
cout<<"刪除成功"<<endl;
#endif
L->len--;
returnOK;
}
/******************************
函數名:Print_List
功能:輸出所有元素
******************************/
StatusPrint_List(Sq_List*L)
{
if(Empty_List(L))
returnERROR;
inttemp;
for(inti=1;i<=Length_List(L);i++)
{
Get_Elem_List(L,i,&temp);
cout<<temp<<"";
}
cout<<endl;
returnOK;
}
/******************************
函數名:print_news
功能:方便用戶選擇
******************************/
voidprint_news(void)
{
cout<<"
********************"
<<"*****************************"<<endl
<<" * 0建立、初始化 *"<<endl
<<" * *"<<endl
<<" * 1插入元素 *"<<endl
<<" * *"<<endl
<<" * 2刪除元素 *"<<endl
<<" * *"<<endl
<<" * 3銷毀 *"<<endl
<<" * *"<<endl
<<" * 4獲取表長 *"<<endl
<<" * *"<<endl
<<" * 5清空 *"<<endl
<<" * *"<<endl
<<" * 6獲取元素 *"<<endl
<<" * *"<<endl
<<" * 7列印 *"<<endl
<<" * *"<<endl
<<" * 8退出程序 *"<<endl
<<" ********************"
<<"*****************************"<<endl;
}
intmain(void)
{
Sq_List*test=NULL;
while(true)
{
print_news();
intchoose,index,num;
cout<<"要進行什麼操作?"<<endl;
cin>>choose;
switch(choose)
{
case0:
test=Init_List();break;
case1:
cout<<"插入位置"<<endl;
cin>>index;
cout<<"插入數據"<<endl;
cin>>num;
Insert_List(test,index,num);break;
case2:
cout<<"刪除的位置"<<endl;
cin>>index;
Delete_List(test,index,&num);
cout<<"被刪除的元素是:"<<num<<endl;break;
case3:
Destroy_List(test);break;
case4:
cout<<Length_List(test)<<endl;break;
case5:
Clear_List(test);break;
case6:
cout<<"獲取哪個位置的元素"<<endl;
cin>>index;
Get_Elem_List(test,index,&num);
cout<<num<<endl;break;
case7:
Print_List(test);break;
case8:
return0;
default:
break;
}
getchar();
getchar();
system("clear");
}
return0;
}
⑥ 數據結構之線性表的順序存儲[1]
線性表的順序存儲是線性表的一種最簡單最直接的存儲結構 它是用內存中的一段地址連續的存儲空間順序存放線性表的每一個元素 用這種存儲形式存儲的線性表我們稱其為順序表 在順序表中用內存中地址的線性關系表示線性表中數據元素之間的關系 這種用物理上的相鄰關系實現數據元素之間的邏輯相鄰關系簡單明了 如圖 所示 設 e 的存儲地址為Loc(e ) 每個數據元素佔d個位元組存儲單元 則第i個數據元素的地址為
Loc(ei)=Loc(e )+(i )*d ≤i≤n
這意味著只要知道順序表首地址和每個數據元素所佔地址單元的個數就可求出第i個數據元素的地址來 所以線性表的順序存儲結構是一種隨機存取的存儲結構 具有按數據元素的序號隨機存取的特點
線性表
順序表的內存表示
下標
數據元素
存儲地址
存儲元素
e
數據結構免費提供,內容來源於互聯網,本文歸原作者所有。
⑦ 線性表的定義是什麼它有什麼特點它有什麼作用
線性表不僅是指在VF中,任何涉及到數據的知識都有線性表:線性表是最基本、最簡單、也是最常用的一種數據結構。線性表中數據元素之間的關系是一對一的關系,即除了第一個和最後一個數據元素之外,其它數據元素都是首尾相接的。線性表的邏輯結構簡單,便於實現和操作。因此,線性表這種數據結構在實際應用中是廣泛採用的一種數據結構。線性表是一種常用的數據結構,以下介紹線性表及其順序存儲,並對棧和隊列及它們的順序實現給出了詳細的設計描述。在實際應用中,線性表都是以棧、隊列、字元串、數組等特殊線性表的形式來使用的。由於這些特殊線性表都具有各自的特性,因此,掌握這些特殊線性表的特性,對於數據運算的可靠性和提高操作效率都是至關重要的。線性表是一個線性結構,它是一個含有n≥0個結點的有限序列,對於其中的結點,有且僅有一個開始結點沒有前驅但有一個後繼結點,有且僅有一個終端結點沒有後繼但有一個前驅結點,其它的結點都有且僅有一個前驅和一個後繼結點。一般地,一個線性表可以表示成一個線性序列:k1,k2,…,kn,其中k1是開始結點,kn是終端結點。是一個數據元素的有序(次序)集線性結構的基本特徵為:1.集合中必存在唯一的一個「第一元素」;2.集合中必存在唯一的一個「最後元素」;3.除最後一個元素之外,均有唯一的後繼(後件);4.除第一個元素之外,均有唯一的前驅(前件)。由n(n≥0)個數據元素(結點)a1,a2,…,an組成的有限序列。數據元素的個數n定義為表的長度。當n=0時稱為空表。常常將非空的線性表(n>0)記作:(a1,a2,…an)數據元素ai(1≦i≦n)只是一個抽象的符號,其具體含義在不同的情況下可以不同。線性表的基本操作1)Setnull(L)置空表2)Length(L)求表長度;求表中元素個數3)Get(L,i)取表中第i個元素(1≤i≤n)4)Prior(L,i)取i的前趨元素5)Next(L,i)取i的後繼元素6)Locate(L,x)返回指定元素在表中的位置7)Insert(L,i,x)插入元素8)Delete(L,x)刪除元素9)Empty(L)判別表是否為空線性表具有如下的結構特點:1.均勻性:雖然不同數據表的數據元素可以是各種各樣的,但對於同一線性表的各數據元素必定具有相同的數所類長度。2.有序性:各數據元素在線性表中的位置只取決於它們的序與,數據元素之前的相對位置是線性的,即存在唯一的「第一個「和「最後一個「的數據元素,除了第一個和最後一個外,其它元素前面均只有一個數據元素直接前趨和後面均只有一個數據元素(直接後繼)。在實現線性表數據元素的存儲方面,一般可用順序存儲結構和鏈式存儲結構兩種方法。鏈式存儲結構將在本網站線性鏈表中介紹,本章主要介紹用數組實現線性表數據元素的順序存儲及其應用。另外棧.隊列和串也是線性表的特殊情況,又稱為受限的線性結構。
⑧ 1、編寫程序實現線性表順序存儲結構的基本操作:初始化、插入、刪除、列印、求長度等操作。
/*線性表的操作*/
#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
struct List
{
ElemType *list;
int size;
int MaxSize;
};
/*初始化列表,即動態存儲空間分配並置L為一個空列表*/
void initList(struct List *L,int ms)
{
if(ms<=0)
{
printf("MaxSize 非法!");
exit(1);
}
L->MaxSize = ms;
L->size = 0;
L->list=malloc(ms * sizeof(ElemType));
if(!L->list)
{
printf("空間分配失敗!");
exit(1);
}
/*printf("%d\n",sizeof(ElemType));*//*暫用位元組數*/
return ;
}
void againMalloc(struct List *L)
{
ElemType *p = realloc(L->list,2*L->MaxSize*sizeof(ElemType));
if(!p)
{
printf("存儲空間分配失敗!");
exit(1);
}
L->list = p; /*使list指向新線性表空間*/
L->MaxSize=2 * L->MaxSize; /*把線性空間大小修改為新的長度*/
}
/*向線性表L的表尾插入元素*/
void insertLastList(struct List *L,ElemType x)
{
if(L->size==L->MaxSize){
/*重新分配更大空間*/
/*againMalloc(L);*/
printf("max\n");
}
L->list[L->size]= x ;
L->size++;
printf("x=%d\n" ,x);
return ;
}
/*插入內容*/
int insertPostList(struct List *L,int pos,ElemType x)
{
int i;
if(pos<1 || pos> L->size+1)
{
/* 若Pos越界則插入失敗 */
return 0 ;
}
if(L->size==L->MaxSize){
/*重新分配更大的存儲空間*/
againMalloc(L);
}
L->list[pos-1] = x;
L->size++;
/* printf("%d\n", L->list[pos-1] ); */
return 1 ;
}
/* 按下標獲得元素值 */
ElemType GetElem(struct List *L ,int pos)
{
if(pos<1 || pos>L->size)
{
printf("元素序號越界!");
exit(1);
}
return L->list[pos-1]; /* 返回線性表中序號為Pos值的元素 */
}
/* 順序掃描(即遍歷)輸出線性表L中的每個元素 */
void traverseList(struct List *L)
{
int i ;
for(i = 0; i<L->size;i++)
{
printf("%d ",L->list[i]);
}
printf("\n");
return ;
}
/*值與X相等的元素,若查找成功則返回其位置,否則返回-1*/
int findList(struct List *L,ElemType x)
{
int i;
for(i = 0;i<L->size;i++){
if(L->list[i]==x){
return i ;
}
}
return -1 ;
}
/* 把線性表L中第pos個元素的值修改為X的值,若修改成功批回1,否則返回0 */
int updatePostList(struct List *L,int pos,ElemType x)
{
if(pos<1 || pos>L->size){
return 0 ;
}
L->list[pos-1]= x;
return 1 ;
}
/* 從線性表中L刪除表頭元素並返回它,若刪除失敗則停止程序運行 */
ElemType deleteFirstList(struct List *L)
{
ElemType temp;
int i ;
if(L->size == 0){
printf("線性表為空,不能進行刪除操作!");
exit(1);
}
temp = L->list[0];
for(i = 0 ;i<L->size;i++)
L->list[i-1] = L->list[i];
L->size--;
return temp;
}
/* 線性表L中刪除第pos個元素並返回它,若刪除失敗則停止程序運行 */
ElemType deleteLastList(struct List *L)
{
if(L->size==0){
printf("線性表為空,不能進行刪除操作!");
exit(1);
}
L->size--;
/* 返回原來表尾的值 */
return L->list[L->size];
}
/* 從線性表L中刪除第pos個元素並返回它,若刪除失則停止程序運行 */
ElemType deletePostList(struct List *L ,int pos)
{
ElemType temp;
int i;
if(pos < 1 || pos > L->size){ /* pos越界則刪除失敗 */
printf("pos值越界,不能進行刪除操作! ");
exit(1);
}
temp = L->list[pos-1];
for(i = pos; i < L->size; i++)
L->list[i-1] = L->list[i];
L->size--;
return temp;
}
/* 返回線性表L當前的長度,若L 為空則返回0 */
int sizeList(struct List *L)
{
return L->size ;
}
/* 是不是一個空列表 */
int EmptyList(struct List *L)
{
if(L->size==0){
return 1;
}
else{
return 0 ;
}
}
/* 清除線性表L中的所有元素,釋放存儲空間,使之成為一個空表 */
void clearList(struct List *L)
{
if(L->list!=NULL){
free(L->list);
L->list=0;
L->size = L->MaxSize = 0 ;
}
return ;
}
main()
{
int a[10]={2,4,6,8,10,12,14,16,18,20};
struct List L;
int i ;
initList(&L,5);
for(i = 0 ;i<10;i++)
{
insertLastList(&L,a[i]);
}
/* 在當前下標下存入該值 */
insertPostList(&L,11,48);
/* 在當前下標下輸入該值 */
insertPostList(&L,3,25);
/* 按下標獲得當前下標的值 */
printf("GetElem=%d\n",GetElem(&L,11));
/* 輸出當前列表中的所有數據 */
traverseList(&L);
/* 查詢與 當前指標的值 */
printf("%d\n",findList(&L,8));
/* 在當前指標下修改值 */
updatePostList(&L, 3, 20);
/* 批指標來獲得值 */
printf("%d\n",GetElem(&L,3));
/* 從線性表L中刪除頭元素並返回它,若刪除失敗則停止程序運行 */
/* deleteFirstList(&L); */
/* 再刪除表頭 */
/* deleteFirstList(&L); */
/* traverseList(&L); */
/* 刪除最後表頭的值 */
/* deleteLastList(&L); */
/* deleteLastList(&L); */
/* 指定刪除下標進行刪除 */
printf("%d\n",deletePostList(&L,5));
printf("%d\n ", sizeList(&L));
printf("%d\n", EmptyList(&L));
traverseList(&L);
/* 清除線性列表 */
clearList(&L);
/* 清除了沒有值了 */
traverseList(&L);
}
⑨ 數據結構線性表之線性表的順序存儲結構[1]
順序表定義
順序表 即用一組連續的存儲單元依次存放線性表的數據元素 若每個數據元素佔用c個存儲單元 並以所佔的第一個存儲單元地址作為這個數據元素的存儲位置 則表中任一元素ai的存儲地址為 LOC(ai)=LOC(a )+(i )*c ≤i≤n
順序表特點
為表中相鄰的元素ai和ai+ 賦以相鄰的存儲位置LOC(ai)和LOC(ai+ )
順序表的基本運算
順序表的建立
由於程序語言中的向量(一組數組)就是採用順序存儲表示 故可用向量這種數組類型來描述順序表 我們用結構類型來定義順序表類型 如下 輸入n個整數 產生一個存儲這些整數的順序表L的函數 如下
順序表的查找
在一個順序表中查找元素值為x的元素的函數 如下
順序表的插入
線性表的插入運算是指在表的第i( ≤i≤n)個位置上 插入一個新結點x 使長度為n的線性表(a … ai ai … an)變成長度為n+ 的線性表(a … ai ax ai … an) 插入操作分成兩階段 第一階段將位於插入點以後的數據元素依次向後移動 為新數據元騰出一個空間 然後在第二階段中將數據元素插入空擋 在一個順序表中第i個元素之前插入一個元素x的函數 如下
lishixin/Article/program/sjjg/201311/23508
⑩ 【數據結構】求線性表的長度和線性表上的查找演算法
/* 順序存儲類型*/
typedef struct
{ ElemType data[MAXSIZE]; /*存放線性表的數組*/
int length; /* length是順序表的長度*/
}SqList; SqList L;
/* 求順序表長度*/
int ListLength(SqList L)
{return(L.length);}
/* 給定序號從順序表中查找元素*/
void ListGet(SqList L ,int i)
{ if(L.length==0) printf("順序表空\n");
else if(i<1||i>L.length) printf("查找的位置不正確\n");
else printf("順序表中第%d個元素的值為:%d\n",i,L.data[i-1]);
}
/* 從順序表中查找與給定元素值相同的元素在順序表中的位置*/
int ListLocate(SqList L, ElemType x)
{int i=0;
while(i<L.length && L.data[i]!=x)
i++;
if (i<L.length) return (i+1);
else return 0;
}