1. 程式人生 > >順序表建立 ,賦值,刪除,插入--- C語言的實現

順序表建立 ,賦值,刪除,插入--- C語言的實現

順序表的基本概念自行百度解決,這裡主要記錄的是順序表用C實現的原始碼

#include <stdio.h>
#include <stdlib.h>
#define maxsize 10


typedef struct{
int data[maxsize];
int length;
}sqlist;      //利用結構建立sqlist的順序表 ,資料項為定義的巨集 10 


sqlist *build();
sqlist *Del();
sqlist *INST(int x); 


sqlist *build(void)  //順序表的建立,賦值。 
{
int j;
sqlist *q=(sqlist *)malloc(maxsize*sizeof(sqlist)); //使用 malloc 函式動態分配10個sqlist結構記憶體 
for(int i=10,j=0;j<maxsize;i++,j++)       //i為data,j為計數器 
{
q->data[j]=i;
q->length=j+1;                       //這裡為什麼要+1呢?因為計算機都是從0開始數 
}
return q;                          
}


sqlist *Del()
{
sqlist *p;
p=build();                        //呼叫之前建好的順序表 
for(int i=0;i<maxsize;i++)        //從0 開始遍歷順序表 
{
if(p->data[i]==12)             //這裡 12為 要刪除的順序表的data為12的數;這個12可以使用者自行輸入 
{
for(int j=i;j<p->length;j++)  //將i的位置賦值給j計數器,j要小於 p的長度,j++ 
{
p->data[j]=p->data[j+1];    //****這裡就是將j這個位置的數給覆蓋掉,不斷地覆蓋掉, 
}                              //然後data為12 的數就刪掉了,是不是很簡單! 
p->length--;                   //你把別人覆蓋掉了,長度自然要減一。 
break;                        //跳出去 
}
else if(i>p->length-1)          //要是i 一直遍歷到 length-1 說明沒有找到 
{
printf("沒找到!");
break; 

}
return p;
}


sqlist *INST(int x)               //插入一個數 
{
sqlist *q;
q=Del();                     //呼叫被刪除的函式Del(); 
for(int i=0;i<maxsize;i++)    //遍歷 
{
if(q->data[i]>=x||i==q->length)      //如果  data[i] 大於那就插進去 
{
for(int j=q->length;j>=i;j--)   //j計數器, 
{
q->data[j]=q->data[j-1];  //從後往前挪位置才能插進去 
}
q->data[i]=x;             //騰完位置 就插進去啊 
q->length++;             //長度+1 
break;
}
}
return q;
}


int main()
{
sqlist *h;
h=build();             //呼叫函式build 
for(int i=0;i<maxsize;i++)                  //遍歷輸出 
{
printf("data=%d\n",h->data[i]);
}
sqlist *del; int x=15;             //20 為插入順序表的值 
del=Del();                            //呼叫函式 
for(int i=0;i<del->length;i++)        //遍歷輸出 
{
printf("del:%d\n",del->data[i]);  
}
sqlist *insert;                       
insert =INST(x);                 //呼叫遍歷輸出檢視 結果 
for(int i=0;i<insert->length;i++)
{
printf("Insert:%d\n",insert->data[i]);
}
//*********************別忘了分配了記憶體你要你要 free();!!!!!!!!!

return 0;


}