1. 程式人生 > >C語言順序表的簡單實現

C語言順序表的簡單實現

  今天剛學了資料結構,老師教的我是雲裡霧裡的,晚上回來自己又教程視訊,不管怎麼說算是簡單的實現了順序表的一些簡單功能。

  順序表裡的難點有向順序表裡插入元素,刪除元素,查詢元素位置這幾個函式比較難寫,我自己根據這幾個難點做了幾個圖片來解釋這幾個功能的具體實現:

//插入元素 
int InsertList(sqlink L,int data,int no){
	int j;
	if(L->last >= maxsize-1){
		printf("沒有空閒空間!\n");
		return 0;
	}else if(no<0||no>L->last+1){
		printf("插入位置不存在!\n");
		return 0;
	}else{
		for(j=L->last;j>=no-1;j--)
			L->data[j+1] = L->data[j];
		L->data[no-1] = data;
		L->last++;
		return 0;
	}
}

//刪除元素
int DeleteList(sqlink L,int no){
	int j;
	if(no<0||no>L->last){
		printf("刪除的元素不存在");
		return 0;
	}else{
		for(j=no;j+1<=L->last;j++)
			L->data[j] = L->data[j+1];
		L->last--;
		return 0;
	}
}

//定位元素
int LocateList(sqlink L,int data){
	int i = 0;
	while(i<=L->last&&L->data[i]!=data)
		i++;
	if(i<L->last) return i;
	else return 0;
}


所有程式碼的實現:

#include<stdio.h>
#include<malloc.h>
#define maxsize  1024  //線性表的最大長度
typedef struct{        //表的型別 
	int data[maxsize];//表的儲存空間 
	int last;
}sqlist,*sqlink;      //說明標示符 


void CreateList(sqlink L);//創空表
void ClearList(sqlink L);//置空表
int GetList(sqlink L,int no);//取表元素 
int LengthList(sqlink L);//求表長
int InsertList(sqlink L,int data,int no);//插入元素
int DeleteList(sqlink L,int no);//刪除元素
int LocateList(sqlink L,int data);//定位元素
int EmptyList(sqlink L);//判空表
void PrintList(sqlink L);//打印表元素 
 
int main(){
	
	sqlink L = (sqlink)malloc(sizeof(sqlist));
	CreateList(L);
	PrintList(L);
	
	int data,x;
	printf("請輸入要插入的資料和位置:");
	scanf("%d %d",&data,&x);
	InsertList(L,data,x);
	PrintList(L);
	
	return 0;
} 

void CreateList(sqlink L){
	int tempNo = 1;
	int tempData = 0;
	do{
		printf("請輸入順序表第%d個元素:",tempNo);
		scanf("%d",&tempData);
		if(tempData!=-1){
			L->data[tempNo-1] = tempData;
			L->last = tempNo-1;
			tempNo++;
		}
	}while(tempNo<=maxsize&&tempData!=-1);
}
void PrintList(sqlink L){
	int i;
	for(i = 0;i<LengthList(L);i++){
		printf("%d ",L->data[i]);
	}
	printf("\n");
} 
void ClearList(sqlink L){
	L->last = -1;
}
int GetList(sqlink L,int no){
	int tempData = 0;
	tempData = L->data[no-1];
	return tempData; 
}
int LengthList(sqlink L){
	int tempL;
	tempL = L->last+1;
	return tempL;
}
//插入元素 
int InsertList(sqlink L,int data,int no){
	int j;
	if(L->last >= maxsize-1){
		printf("沒有空閒空間!\n");
		return 0;
	}else if(no<0||no>L->last+1){
		printf("插入位置不存在!\n");
		return 0;
	}else{
		for(j=L->last;j>=no-1;j--)
			L->data[j+1] = L->data[j];
		L->data[no-1] = data;
		L->last++;
		return 0;
	}
}
//刪除元素
int DeleteList(sqlink L,int no){
	int j;
	if(no<0||no>L->last){
		printf("刪除的元素不存在");
		return 0;
	}else{
		for(j=no;j+1<=L->last;j++)
			L->data[j] = L->data[j+1];
		L->last--;
		return 0;
	}
}
//定位元素
int LocateList(sqlink L,int data){
	int i = 0;
	while(i<=L->last&&L->data[i]!=data)
		i++;
	if(i<L->last) return i;
	else return 0;
}