資料結構中構建順序表,資料結構構建順序

來源:互聯網
上載者:User

資料結構中構建順序表,資料結構構建順序

     順序表指的是資料元素在記憶體中連續分配地址的數組,由於指標無法指出數組長度,編譯時間不會報錯,所有用結構體來表示一個順序表:

順序表用C語言的表示方法如下:

<span style="font-family: Arial, Helvetica, sans-serif;">  #define OK 1</span>
  #define ERROR -1  typedef int elem_type;
  typedef int Statue; //  int Arrylength;   typedef struct sqlist   {   elem_type  *Arry;   int  Arrylength;   } Sqlist;    //建立一個空表  Statue Create_Sqlist(Sqlist *&S)   {    //S->Arry = (elem_type *) malloc(MaxSize*sizeof(elem_type));//L = (sqlist *)malloc(sizeof(sqlist));   // L->data = (char *)malloc(maxsize);    S = (Sqlist *)malloc(sizeof(Sqlist)); S->Arry = (elem_type *)malloc(MaxSize);   if(!S->Arry)   {   return ERROR;   }   else   {   S->Arrylength = 0;   return OK;    }   }//順序表賦初始值  void   Init_Sqlist(Sqlist *&S)  {  int i;  for(i=0;i<20;i++)  {     S->Arry[i]=rand()%100;        S->Arrylength++;   }  }  //在第i個位置添加一個元素m  Statue Insert_Sqlist(Sqlist *&S,int i,int InsertNum){  if(i<=0 && i>S->Arrylength)   return ERROR;  else  {  int j;  for(j=0;j<=S->Arrylength-i;j++)   S->Arry[S->Arrylength-j]=S->Arry[S->Arrylength-1-j];    //i以後元素往後移動一位   S->Arry[i-1]=InsertNum;   S->Arrylength++;   return OK;  }}//將第i個元素刪除  Statue Delete_Sqlist(Sqlist *&S,int i){  if(i<=0 && i>S->Arrylength)   return ERROR;  else  {  int j;  for(j=0;j<=S->Arrylength-i;j++)    S->Arry[i-1+j]= S->Arry[i+j];   S->Arrylength--;   return OK;  }}//刪除值為x的元素  void DeleteX_Sqlist(Sqlist *&S,int x){  int i;  for(i=0;i< S->Arrylength;i++)      {      if(x == S->Arry[i])      {      //Delete_Sqlist( *S, i);int j;      for(j=0;j<=S->Arrylength-i;j++)        S->Arry[i+j]= S->Arry[i+j+1];      S->Arrylength--;      }      }}  //列印函數  void print(Sqlist *&S)  {     int m;for(m=0;m<S->Arrylength;m++){cout<<setw(4)<<S->Arry[m];if((m+1)%4==0)cout<<endl;     }  }int main(){Sqlist *p1;    Create_Sqlist( p1);cout<<"建立順序表is OK"<<endl;    Init_Sqlist(p1);cout<<"初始化順序表is OK,資料如下:"<<endl;print(p1); int i,InsertNum;cout<<"輸入兩個如下:";cin>>i;cin>>InsertNum;cout<<"插入數操作如下:在第"<<i<<"行插入數字"<<InsertNum<<"後。結構顯示如下:"<<endl;Insert_Sqlist( p1, i, InsertNum);print(p1);int k;cout<<endl;cout<<"輸入一個數如下:";cin>>k;cout<<"刪除數操作如下:"<<endl;cout<<"想要刪除第"<<k<<"個數 顯示如下:"<<endl;    Delete_Sqlist(p1,k);    print(p1);int j;cout<<"輸入一個數"<<endl;    cin>>j;cout<<"刪除指定數操作如下:輸入想要刪除的數是:"<<j<<"    結果顯示如下:"<<endl;    DeleteX_Sqlist(p1,j);print(p1);while(1);return 0;}
        顯示結果如下:


                分析比較下面程式碼片段的差別:

A段——建立空表沒有bug的代碼:

 typedef struct sqlist   {   elem_type  *Arry;   int  Arrylength;   } Sqlist;    //建立一個空表  Statue Create_Sqlist(Sqlist *&S)   {        S = (Sqlist *)malloc(sizeof(Sqlist)); S->Arry = (elem_type *)malloc(MaxSize);   }
B段——建立空表出現bug的代碼:

typedef struct sqlist   {   elem_type  Arry[MaxSize];   int  Arrylength;   } Sqlist;    //建立一個空表  Statue Create_Sqlist(Sqlist *S)   {    S->Arry = (elem_type *) malloc(MaxSize*sizeof(elem_type));  }
               
         
       





資料結構中的順序表怎編寫???

順序表怎麼編寫?

你建立一個固定的數組,或是申請一塊連續的記憶體空間。

把你要建立的資料,依次填入到數組對應的位置。

這樣你就可以對這個順序表,進行排序,輸出進行操作了。
 
資料結構中順序表的建立、尋找與折半尋找

//用vc調試過了有問題可以提出
#include<stdio.h>
#define listsize 100
typedef struct
{
int data[listsize];
int length;
}sqlist;//順序表的類型
void createtsqlist(sqlist &L,int a[],int n)//用數組建立順序表
{
L.length=0;
for(int i=0;i<n;i++)
{
L.data[L.length++]=a[i];
}
}

void findvalue(sqlist L,int x) //尋找x是否在順序表內
{
for(int i=0;i<L.length;i++)
{
if(L.data[i]==x)
{
printf("%d是第%d個元素\n",x,i+1);return;
}
}
printf("%d不在順序表內\n",x);
}
void search_bin(sqlist L,int x)//折半尋找有序表
{
int low=1;int high=L.length;int mid;
while(low<=high)
{
mid=(low+high)/2;
if(x==L.data[mid])
{
printf("%d是第%d元素\n",x,mid+1);return;
}
else if(x<L.data[mid])high=mid-1;
else low=mid+1;
}
printf("%d不在順序表內\n",x);
}
void main()
{
int a[10]={1,23,45,34,67,87,9,13,7,11};
int b[10]={1,2,3,4,5,6,9,14,19,23};//保證b中元素有序
sqlist L1,L2;//L2建立為有序表
createtsqlist(L1,a,10);
findvalue(L1,45);//尋找45是否在表內可以換成其他數
createtsqlist(L2,b,10);
search_bin(L2,14);//尋找14是否在表內可以換成其他數
}
 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.