順序表的實現(C語言)
*
指向結構體變數的指標作函式引數
*
***********************/
#include<stdio.h>
#define MAXSIZE 100
typedef int datatype;
typedef struct
{
datatype a[MAXSIZE];
int size;
} sequence_list;
void init(sequence_list *);
int empty(sequence_list slt);
void append(sequence_list *slt,datatype x);
void display(sequence_list slt);
int find(sequence_list *slt,datatype x);
void insert(sequence_list *slt,int i,datatype x);
void dele(sequence_list *slt,int position);
datatype get(sequence_list slt,int i);
int main(){
sequence_list L;
init(&L);
if(empty(L)){
printf("這個線性表是空的!請插入資料!!!\n");
}
printf("請輸入資料:");
datatype x=0;
int i;
for(i=0;i<5;i++){
scanf("%d",&x);
append(&L,x);
}
display(L);
printf("請輸入你要 查詢的數:");
scanf("%d",&x);
printf("您查詢的數在第%d個位置!\n",find(&L,x)+1);
printf("請輸入要獲取元素的位置:");
scanf("%d",&i);
int y=get(L,i);
printf("您查查的第%d個元素為:%d\n",i,y);
insert(&L,3,100);
printf("插入100的順序表為:");
display(L);datatype get(sequence_list slt,int i);
printf("\n");
dele(&L,0);
printf("刪除第一個數的效果為:");
display(L);
return 0;
}
void init(sequence_list *slt)
{
slt->size=0;
}
int empty(sequence_list slt)//判斷是否為空
{
return (slt.size==0 ? 1:0);
}
void append(sequence_list *slt,datatype x)
{
if(slt->size==MAXSIZE)
{printf("順序表是滿的!");exit(1);}
slt->a[slt->size]=x;
slt->size=slt->size+1;
}
void display(sequence_list slt)
{
int i;
if(!slt.size) printf("\n順序表是空的!");
else
for(i=0;i<slt.size;i++)
printf("%5d",slt.a[i]);
}
int find(sequence_list *slt,datatype x){
int i=0;
while(i<slt->size&&x!=slt->a[i]){
i++;
}
printf("一共%d個。在第%d箇中\n",slt->size,i);
return (i<slt->size?i:1);
}
datatype get(sequence_list slt,int i)//獲取 第i個節點
{
if(i<0||i>=slt.size)
{printf("\n指定位置的結點不存在!");exit(1);}
else
return slt.a[i];
}
void insert(sequence_list *slt,int i,datatype x){
int j;
if(i<0||i>slt->size){
printf("該位置 不存在 !");
}
if(slt->size>=MAXSIZE){
printf("不能再插了,再插就溢位了");
}
for(j=slt->size-1;j>=i;j--){
slt->a[j+1]=slt->a[j];
}
slt->a[i]=x;
slt->size++;
}
void dele(sequence_list *slt,int position){//刪除節點特別重要
int i;
if(slt->size==0){
printf("\n順序表是 空的!沒法刪除!");exit(1);
}
if(position<0||position>slt->size){
printf("\n指定 刪除的位置不存在!");exit(1);
}
for(i=position;i<slt->size-1;i++){
slt->a[i]=slt->a[i+1];
}
slt->size--;
}