1. 程式人生 > >嚴蔚敏版資料結構—順序表

嚴蔚敏版資料結構—順序表

嚴蔚敏版資料結構是本好書!

少廢話咯,直接上程式碼研究吧!

程式碼不難,重在理解

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define OK 1
#define ERROR 0

//定義好書的資料型別 Book型別
typedef struct
{
	char name[20];
	char no[10];
	float price;
}Book;
//定義順序表結構
typedef struct
{
	Book *p;
	int length;
}SqList;

//初始化順序表 
int InitList(SqList &L)
{
	L.p=new Book[100];
	L.length=0;
	
	return OK;
}
//順序表取值 
int  GetElem(SqList L,int i,Book &e)
{
	if(i<1||i>L.length) 
	{
		printf("傳入i值不合理!");
		return ERROR;
	}
		
	e=L.p[i-1];
	
	return OK;
} 
//查詢元素 
int LocateElem(SqList L,Book e)
{
	int i;
	for(i=0;i<L.length;i++)
	{
		if(L.p[i].price==e.price)//這裡本來還要判斷其他內容是否相等,但是C語言字串的判斷挺麻煩 
			return i+1;			// 這兒作為練習,就省略,簡單起見額,判斷也不難,寫個函式即可 
	}	return -1;
}
//插入元素
int  InsertElem (SqList &L,int i,Book e)
{
	if(i<1||i>L.length+1)
	{
		printf("傳入i值不合理!");
		return ERROR;
	}
		
	if(L.length==100)
	{	
		printf("當前順序表儲存空間已滿!");
		return ERROR;
	}
	
	int j;
	for (j=L.length-1;j>=i-1;j--)
	{
		L.p[j+1]=L.p[j];
	}
	
	L.p[i-1]=e;
	++L.length;
	return OK;
	
	
} 
//刪除元素
int DeleteElem(SqList &L,int i)
{
    int j;
	if(i<1||i>L.length+1)
	{
		printf("傳入i值不合理!");
		return ERROR;
	}
	for (j=i;j<L.length-1;j++)
	{
		L.p[j-1]=L.p[j];
	}
	--L.length;
	
	return OK;
} 

//輸入元素
void InputElem(SqList &L,int n)
{
	int i;
	for(i=0;i<n;i++)
	{
		printf("請輸入書本資訊:");
		scanf("%s",&L.p[i].name);
		scanf("%s",&L.p[i].no);
		scanf("%f",&L.p[i].price);
	}
	L.length=n;
}


//輸出順序表 
void PrintElem(SqList L)
{
	 int i;
	 for(i=0;i<L.length;i++)
	 {
	 	printf("The -NO-%d-Book:     ",i+1);
	 	printf("%s   ",L.p[i].name);
	 	printf("%s   ",L.p[i].no);
	 	printf("%.2f  \n",L.p[i].price);
	 } 
} 

int main()
{	Book a,b ;          //作為插入的元素 
	SqList L;
	InitList(L);     //建立順序表 
	InputElem(L,3);  //輸入初始值,三個元素 
	PrintElem(L);    //列印一下看看 
	//給 a 賦值 
	strcpy(a.name,"666");
	strcpy(a.no,"666");
	a.price=6.66;
  
 	printf("\n---------------插入a元素在第二個位置---------------\n");
	InsertElem(L,2,a);//插入元素 
	PrintElem(L); 	  //列印看看插入是否成功 
	//列印看看查詢是否成功 
	printf("\n------------a元素在第%d個位置!-------------\n",LocateElem(L,a)); 
	//取位置是二的元素的物件
	printf("\n------------取出位置為二的元素給b變數-------------\n",LocateElem(L,a)); 
	GetElem(L,2,b);
	printf("\n b_name:%s,b_no:%s,b_price:%.2f\n",b.name,b.no,b.price);
	
	//刪除a元素
	printf("\n------------將a元素刪除後的順序表-------------\n",LocateElem(L,a)); 
	DeleteElem(L,2);
	PrintElem(L);
	
	return 0;
} 

如有錯誤,還請多多指教,指正,謝謝