1. 程式人生 > >c語言--線性表的順序儲存

c語言--線性表的順序儲存

實現線性表建立、插入、刪除、查詢和顯示線性表中元素等基本操作

#include "stdio.h"
#include "malloc.h"
#define MAXSIZE   200        //線性表允許的最大長度
#define datatype int
typedef  struct              //定義線性表的結構
{   datatype  data[MAXSIZE];     //表示線性表(a1,a2,….,an)
    int  last;     //last表示線性表的實際長度
} SeqList;
SeqList *init_SeqList( )
{ 
	SeqList *L;
	L=(SeqList *)malloc(sizeof(SeqList));
	if(!L)
		return NULL;
	else
	{
		L->last=0;
		return L;
	}
}
int  Insert_SeqList(SeqList *L,int i,datatype x)
{
	int j;
	if(i<1||i>L->last+1)
		return 0;
	if(L->last>=MAXSIZE)
	{
		return 0;
	}
	for(j=L->last;j>=i-1;--j)
		L->data[j+1]=L->data[j];
	L->data[i-1]=x;
	L->last++;
	return 1;
}
int Delete_SeqList(SeqList *L,int i)  
{
	int j;
	if(i<0||i>L->last)
		return 0;
	if(L->last<=0)
	{
		return 0;
	}
	for(j=i;j<=L->last-1;++j)
		L->data[j-1]=L->data[j];
	L->last--;
	return 1;
}
int Location_SeqList(SeqList *L, datatype x)   // 查詢元素x
{
int i=1;
while ( i <=L->last && L->data[i] != x )
i++;
if ( i <=L->last )
return (i);
else
return (0);
}
void print(SeqList *L)       //列印線性表    
{
	int i;
	for(i=0;i<L->last;i++)
		printf("%4d",L->data[i]);
}
void main()
{   SeqList *L;
    int i,j,k; 
	datatype x;
    do
    {   printf("\n\n\n\n");
        printf("\t\t\t 線性表子系統\n");
	printf("\t\t*******************************\n");
	printf("\t\t*        1----初始化表     *\n");
	printf("\t\t*        2----插    入    *\n");
	printf("\t\t*        3----刪  除    *\n");
	printf("\t\t*        4----查  找    *\n");
	printf("\t\t*        5----顯  示    *\n");
	printf("\t\t*        0----返  回    *\n");
	printf("\t\t*******************************\n");
	printf("\t\t 請選擇選單項(0-5):");
	scanf("%d",&k);getchar();
	switch(k)
         {
	  case 1: 
			L=init_SeqList( );    //初始化線性表
 			break;
      case 2:          //線上性表第i位置處插入值為X的元素
			printf("\n   請輸入插入的位置i和資料X(輸入格式:i,X):");
			scanf("%d,%d",&i,&x);
		    Insert_SeqList(L,i,x);
			break;
	  case 3:          //刪除線性表中值為X的元素 
			printf("\n   請輸入要刪除元素的位置i:");
			scanf("%d",&i);
		    j=Delete_SeqList(L,i);
			if (j == 1) printf("刪除成功!!");
			else printf("刪除失敗!!");
			break;
	  case 4:       //查詢線性表中元素值為x的位置
			printf("\n   請輸入要查詢的數值X:");
			scanf("%d",&x);
		    j=Location_SeqList(L,x);
			if (j != -1 ) 
				{ print(L);printf("中值為X所在的位置是 %d ",j);}
			else
				printf("線性表中無此元素!!\n");
			break;
	   case 5:        //輸出線性表
            printf("\n線性表的順序儲存為:");
            print(L);  
		 }
	}while(k!=0);
}

說明:1.這個是鄙人大二期間所學,所以模板很多人都用過,如有雷同,不是偶然。 2.發部落格只為了紀念所學所感,於此而已。