C語言實現對順序表的增刪改查
順序表的概念
- 采用順序儲存結構的線性表稱為順序表,他的數據元素按照邏輯順序依次有放在一組連續的儲存單元之中。邏輯上相鄰的數據元素,其儲存位置也彼此相鄰
順序表的主要算法
(1).在表中第i個位置插入新元素x
- 第一步,判斷插入位置的合理性以及表是否已滿;
- 第二步,從最后一個元素開始依次向前,將每個元素向后移動一個位置,直到第i個元素位置;
- 第三步,向空出的第i個位置存入新元素x;
- 第四步,最后還要將線性表長度加1;
代碼如下:
int Insert(int line[],int num,int length,int place){
if(num<1||num>length+1){
return -1;
}else{
int j;
for(j=length-1;j>=place-1;j--){
line[j+1]=line[j];
}
line[place-1]=num;
return 1;
}
}
(2).在表中刪除第i個元素
- 第一步,判斷刪除位置的合理性;
- 第二步,從第i+1個元素開始,依次向后直到最后一個元素為止,將每個元素向前移動一個位置,這是第i個元素已經被刪除覆蓋;
- 第三步,最后還要將線性表長度減1;
代碼如下:
int Delete(int line[],int num,int length){
if(num<0||num>length){
return 2;
}else{
int j;
for(j=num;j<=length-1;j++){
line[j-1]=line[j];
}
return 1;
}
}
(3).在表中查找某個元素
- 查找元素的情況相較於前面的算法來說相對要復雜一些。如果數據元素是整數、實數這些基本數據類型,那么查找元素時自然就是與數據元素本身進行對比。如果數據元素是包含多個屬性的結構體或者對象,那么查找元素往往是與數據元素的某個屬性比較。接下來演示的是相對的數據元素的直接比較的情況。
代碼如下
int Search(int line[],int num,int length){
int i;
for(i=0;i<=length;i++){
if(line[i]==num){
return i;
}
}
return -1;
}
接下來貼出完整的示例代碼:
#include <stdio.h>
#include <stdlib.h>
#define N 30
int Search(int line[],int num,int length);//傳入數組,需要查找的元素,數組長度,
int Delete(int line[],int num,int length);//傳入數組,需要刪除的元素位置,數組長度
int Insert(int line[],int num,int length,int place);//傳入數組,需要插入的數值,數組長度,插入位置
int Alter(int line[],int num,int length,int place);//傳入數組,需要修改為的值,數組長度,修改的位置
void ReadLine(int line[],int length);//讀取輸入
void PrintLine(int line[],int length);//打印數組
int main()
{
int n,m,num;
int line[N];
int length,place;
while(1){
printf("你需要執行的功能:\n1:刪除一個元素\n2.查找一個元素\n3.輸入數組元素\n4.查看數組元素\n5.插入一個元素\n6.修改數組中的元素\n");
scanf("%d",&n);
switch(n){
case 1:
printf("輸入你需要刪除的元素坐標\n");
scanf("%d",&num);
printf("\n");
m=Delete(line,num,length);
if(m!=2){
printf("success\n");
length=length-1;
}else{
printf("false\n");
}
break;
case 2:
printf("輸入需要查找的元素\n");
scanf("%d",&num);
m=Search(line,num,length);
if(m<0){
printf("false!",m);
}else{
printf("%d\n",m);
}
break;
case 3:
printf("輸入數組長度\n");
scanf("%d",&length);
ReadLine(line,length);
break;
case 4:
PrintLine(line,length);
break;
case 5:
printf("輸入您需要插入的位置\n");
scanf("%d",&place);
printf("輸入您需要在該位置插入的元素");
scanf("%d",&num);
m=Insert(line,num,length,place);
if(m>=0){
printf("插入成功\n");
}else{
printf("插入失敗\n");
}
length=length+1;
break;
case 6:
printf("輸入你需要修改的元素位置\n");
scanf("%d",&place);
printf("輸入用來替換該位置的元素\n");
scanf("%d",&num);
m=Alter(line,num,length,place);
if(m>=0){
printf("修改成功\n");
}else{
printf("修改失敗\n");
}
break;
default:
printf("輸入錯誤,請重啟程序!\n");
return 0;
}
}
}
int Alter(int line[],int num,int length,int place){
if(num<1||num>length+1){
return -1;
}else{
line[place]=num;
return 1;
}
}
int Delete(int line[],int num,int length){
if(num<0||num>length){
return 2;
}else{
int j;
for(j=num;j<=length-1;j++){
line[j-1]=line[j];
}
return 1;
}
}
int Insert(int line[],int num,int length,int place){
if(num<1||num>length+1){
return -1;
}else{
int j;
for(j=length-1;j>=place-1;j--){
line[j+1]=line[j];
}
line[place-1]=num;
return 1;
}
}
void ReadLine(int line[],int length){
int i;
for(i=0;i<length;i++){
printf("輸入數組元素\n");
scanf("%d",&line[i]);
}
}
int Search(int line[],int num,int length){
int i;
for(i=0;i<=length;i++){
if(line[i]==num){
return i;
}
}
return -1;
}
void PrintLine(int line[],int length){
int i;
if(length>=N){
printf("沒有數組,請創建數組\n");
}else{
for(i=0;i<length;i++){
printf("%3d",line[i]);
}
printf("\n");
}
}
