線性表(順序表)C語言程式碼實現-處理整型資料(附詳細解釋)。 _清風明月
#include <conio.h>//conio是Console Input / Output(控制檯輸入輸出)的簡寫,其中定義了通過控制檯進行資料輸入和資料輸出的函式,
//主要是一些使用者通過按鍵盤產生的對應操作,比如getch()函式等等。
#define MAX 30 //定義線性表的最大長度enum BOOL{False,True}; //定義BOOL型
typedef struct{
int elem[MAX]; //int陣列型別的線性表
int length; //length指示當前線性表的長度
}sqlist;//sqlist是struct的別名。
void initial(sqlist &); //初始化線性表1.
BOOL insert(sqlist &v,int loc,int intt);//線上性表中插入元素 (引用線性表,位置,int型變數)2.
BOOL del(sqlist &,int weizhi,int &); //線上性表中刪除元素 (引用線性表,位置,返回該位置被刪除元素的元素值)3.
//1.2.3.都需要對線性表進行操作,所以是對線性表的引用。&。
int locate(sqlist,int elem); //線上性表中定位元素(線性表,需要被查詢的元素)
void print(sqlist); //顯示線性表中所有元素(打印出線性表中所有元素)
void main()//(主函式)
{
sqlist S; //S為一線性表(建立一個名叫S的順序表結構體物件。)
int loc,flag=1;//定義整型位置變數,和標記變數(標記變數的作用之後用於進入while迴圈)
char j; //用於之後swich來選擇條件的一個字元。
int intt; //(要插入的int型變數元素)
BOOL temp; //(temp用來記錄插入,刪除函式是否成功插入的返回值)
printf("本程式用來實現順序結構的線性表。\n");
printf("可以實現查詢、插入、刪除等操作。\n");
initial(S); //初始化線性表(呼叫之後的函式進行初始化。)
while(flag)
{
printf("請選擇:\n");
printf("1.顯示所有元素\n");
printf("2.插入一個元素\n");
printf("3.刪除一個元素\n");
printf("4.查詢一個元素\n");
printf("5.退出程式 \n");
scanf(" %c",&j);
switch (j)
{
case '1':print(S); break; //顯示所有元素
case '2':
{
printf("請輸入要插入的元素(一個字元)和插入位置:\n");
printf("格式:字元,位置;例如:a,2\n");
scanf(" %d,%d", &intt, &loc); //輸入要插入的元素和插入的位置
temp = insert(S, loc, intt); //插入
if (temp == False)
printf("插入失敗!\n"); //插入失敗
else
{
printf("插入成功!\n");
print(S);
} //插入成功
break;
}
case '3':{printf("請輸入要刪除元素的位置:");
scanf("%d", &loc); //輸入要刪除的元素的位置
temp = del(S, loc, intt); //刪除(引用線性表,位置,返回該位置被刪除元素的元素值)
if (temp == True)
printf("刪除了一個元素:%d\n", intt); //刪除成功
else
printf("該元素不存在!\n"); //刪除失敗
print(S);
break;
case '4':{
printf("請輸入要查詢的元素:");
scanf(" %d", &intt); //輸入要查詢的元素
loc = locate(S, intt); //定位
if (loc != -1)
printf("該元素所在位置:%d\n", loc + 1); //顯示該元素位置
else
printf("%d 不存在!\n", intt);//當前元素不存在
break;
}
case '5':{
flag = 0;
printf("程式結束,按任意鍵退出!\n"); }
}
}
getch();
}
}
void initial(sqlist &v)
{
//初始化線性表
int i;
printf("請輸入初始線性表長度:n="); //輸入線性表初始化時的長度
scanf("%d",&v.length);
printf("請輸入從1到%d的各元素(整型),例如:1 2 3 4\n",v.length);
getchar();
for(i=0;i<v.length;i++)
scanf("%d",&v.elem[i]); //輸入線性表的各元素
}
BOOL insert(sqlist &v,int loc,int intt)
{
//插入一個元素,成功返回True,失敗返回False
int i;
if((loc<1)||(loc>v.length+1))
{
printf("插入位置不合理!\n"); //位置不合理
return False;
}
else if(v.length>=MAX) //線性表已滿
{
printf("線性表已滿!\n");
return False;
}
else
{
for(i=v.length-1;i>=loc-1;i--)
v.elem[i+1]=v.elem[i];//其後元素依次後移
v.elem[loc-1]=intt; //插入元素
v.length++; //線性表長度加一
return True;
}
}
BOOL del(sqlist &v,int loc,int &intt)
{
//刪除一個元素,成功返回True,並用ch返回該元素值,失敗返回False
int j;
if(loc<1||loc>v.length) //刪除位置不合理
return False;
else {
intt=v.elem[loc-1]; //ch取得該元素值
for(j=loc-1;j<v.length-1;j++)
v.elem[j]=v.elem[j+1]; //其後元素依次前移
v.length--; //線性表長度減一
return True;
}
}
int locate(sqlist v,int intt)
{
//線上性表中查詢int元素的位置,成功返回其位置,失敗返回-1
int i=0;
while(i<v.length && v.elem[i]!=intt)
++i; //當前位置後移,直到找到為止
if(v.elem[i]==intt) //找到當前元素
return i;
else return(-1);
}
void print(sqlist v) //顯示當前線性表所有元素
{
int i;
for(i=0;i<v.length;i++)
printf("%d ",v.elem[i]);
printf("\n");
}