1. 程式人生 > >線性表的操作(完成表的建立,插入,刪除,排序,銷燬,查詢 )

線性表的操作(完成表的建立,插入,刪除,排序,銷燬,查詢 )

#include <stdio.h>
#include <stdlib.h> 
#define Length 100
#define AddLength 50
//完成表的建立,插入,刪除,排序,銷燬,查詢 
typedef struct {
	int *elem;
	int length;
	int listsize;
}SqList;

void InitList(SqList &L)
{//構建一個線性表 
	int n;
	int i,j;
	L.elem=(int *)malloc(Length*sizeof(int));
	if(!L.elem)
		exit(0);
	L.listsize=Length;
	printf("請輸入數字個數:");
	scanf("%d",&n);
	printf("請輸入資料:");
	for(i=0;i<=n-1;i++)
		scanf("%d",&L.elem[i]);
	L.length=n;
	printf("\n建立成功.\n");
}

void SortList(SqList &L)
{//完成表的排序
	int i,j,temp;
	for(i=0;i<L.length-1;i++)
	{
		for(j=i+1;j<L.length;j++)
		{
			if(L.elem[i]<L.elem[j])
			{
				temp=L.elem[i];
				L.elem[i]=L.elem[j];
				L.elem[j]=temp;
			}
		}
	}
}

void AddList(SqList &L,int i,int &e)
{//新增e放到第i個位置前面 
	int j;
	if(i<=0 && i>L.length+1)
	{
		printf("插入位置錯誤\n");
		return ;
	}
	if(L.length+1>L.listsize)
	{
		realloc(L.elem,L.length+AddLength);
		L.listsize=L.length+AddLength;
	}
	for(j=L.length;j>=i;j--)
		L.elem[j]=L.elem[j-1];
	L.elem[i-1]=e;
	L.length++;
	printf("插入成功.\n");
}

void DeleteList(SqList &L,int i,int &e)
{//刪除第i個數據,返回給e 
	e=L.elem[i-1];
	for(int j=i-1;j<L.length-1;j++)
		L.elem[j]=L.elem[j+1];
	L.length--;
}

void DestoryList(SqList &L)
{
	free(L.elem);
	L.length=0;
	L.listsize=0;
}

int SearchList(SqList L,int e)
{//查詢資料e在表中的位置 
	int i;
	for(i=0;i<L.length;i++)
		if(L.elem[i]==e)
			return i+1;
	return 0;
	
}

void DisplayList(SqList L)
{
	int i;
	for(i=0;i<L.length;i++)
		printf("%d ",L.elem[i]);
	putchar('\n');
}

int main()
{
	int n,i,e;
	SqList L;
	while(1)
	{
		printf("			1、建立一個線性表\n");
		printf("			2、插入資料\n");
		printf("			3、刪除資料\n");
		printf("			4、對資料排序\n");
		printf("			5、查詢資料的位置\n");
		printf("			6、顯示資料\n");
		printf("			7、銷燬線性表\n");
		printf("			8、退出\n");
		scanf("%d",&n);
		switch(n)
		{
			case 1:
				InitList(L);
				break;
			case 2:
				printf("輸入插入的資料和位置:");
				scanf("%d %d",&e,&i);
				AddList(L,i,e);
				break;
			case 3:
				printf("輸入刪除資料的位置:");
				scanf("%d",&i);
				DeleteList(L,i,e);
				printf("刪除的資料為%d\n",e);
				break;
			case 4:
				SortList(L);
				break;
			case 5:
				printf("輸入要查詢的資料:");
				scanf("%d",&e);
				i=SearchList(L,e);
				if(i==0)
					printf("未查詢到。\n");
				else
					printf("%d在第%d個位置\n",e,i);
				break;
			case 6:
				DisplayList(L);
				break;
			case 7:
				printf("銷燬資料\n");
				break;
			case 8:
				return 0;
		}
	}
	
	return 0;
}