1. 程式人生 > >資料結構順序表相關基本操作練筆

資料結構順序表相關基本操作練筆

#include<stdio.h>
#include<stdlib.h>
#define MAX 30
#define LIST_INCREMENT 40
 typedef struct{
 	int lenth;
 	int listsize;
 	int *base;
 	
 }sqlist;
 
 void InitList(sqlist &L)//初始化順序表 
 {
 	L.base=(int *)malloc(MAX*sizeof(int));
 	if(!L.base)//分配記憶體失敗 
 	exit(1);
 	L.lenth=0;
 	L.listsize=MAX;
 	printf("please input the lenth of the list\n");
 scanf("%d",&L.lenth);
 printf("please input the val of the list:");
 for(int i=0;i<L.lenth;i++)
 {
 	scanf("%d",&L.base[i]);
  } 
 	
 }
 void output(sqlist L)//輸出函式 
 {
    int i;
    for(i=0;i<L.lenth;i++)
    {
        printf("%5d",L.base[i]);
    }
 printf("\n");
}
bool compare(int elem1,int elem2)
	{
	if(elem1==elem2)
	return true;
	else 
	return false;
 	} 
 int LocateElem(sqlist L,int elem)
 {
 	int i=1;
 	int *p=L.base;
 	while(i<=L.lenth&&!compare(*p++,elem))//注意是*p++,取的是指標p的值,再++,不是 *p
 //如果這裡用*p的話,下面一定不要忘了加*p++; 
 	{
 	 i++; 	
 }
 	if(i<=L.lenth)
 	return i;	
 	else 
 	return 0;
 }
 void Destroylist(sqlist &L)//銷燬順序線性表L 
 {
 	free(L.base);//釋放L.base所指向的儲存空間 
	 L.base=NULL;//L.base 不指向任何的儲存單元 
	 L.lenth=0;
	 L.listsize=0; 
 	
 }
 int ListInsert(sqlist &L,int i,int elem)
 {
 	int *newbase,*p,*q;
 	if(i<1||i>L.lenth+1)
 	{
 		return 0;
	 }
	 if(L.lenth==L.listsize)
	 {
	 	newbase=(int *)realloc(L.base,(L.listsize+LIST_INCREMENT)*sizeof(int)); 
	 	if(!newbase)
	 	exit(1);
	 	L.base=newbase;
	 	L.listsize+=LIST_INCREMENT;
	 }
	 q=L.base+i-1;
	 for(p=L.base+L.lenth-1;p>=q;--p)
	 {
	 	*(p+1)=*p;
	 	*q=elem;
		 L.lenth++;
		
	 }
	  return 0; 
  } 
  void ListDele(sqlist L,int i)
  {
  	int elem;
	int *p,*q;
  	
  	p=L.base+i-1;
  	elem=*p;
  	q=L.base+L.lenth-1;
  	for(p++;p<=q;p++)
  		*(p-1)=*p;
  		L.lenth-1;
  	
   } 
  void MergeList(sqlist La,sqlist &Lb,sqlist &Lc)
  {
  	int *pa,*pa_last,*pb,*pb_last,*pc;
	  pa=La.base;
	  pb=Lb.base;
	  Lc.listsize=Lc.lenth=La.lenth+Lb.lenth;
	  pc=Lc.base=(int*)malloc(Lc.listsize*sizeof(int));
	  if(!Lc.base)
	  {
	  	exit(0);
	   } 
	   pa_last=La.base+La.lenth-1;
	   pb_last=Lb.base+Lb.lenth-1;
	    while(pa<=pa_last&&pb<=pb_last)
   	{
   			if(*pa<=*pb)
   			*pc++=*pa++;
   			else 
   			*pc++=*pb++;
   	}
   	while(pa<=pa_last)
   		*pc++=*pa++;
   		while(pb<=pb_last)
   		*pc++=*pb++;
   } 	
  
int main()
{
int a,i;
int elem;
sqlist La;
InitList(La);
output(La);
printf("請輸入要查詢的資料:");
scanf("%d",&elem);
a=LocateElem(La,elem);
printf("%d",a);
printf("please input the number you want to del\n");
scanf("%d",&i);
ListDele(La,i);
output(La);
return 0;	
 }