順序表建立 ,賦值,刪除,插入--- 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;
}