C言語---線形シーケンステーブルのコード実装

初期化、それが空かどうかの判別、i番目の位置への要素の挿入、i番目の要素の削除、長さの検索、要素の位置の返却、i​​番目の要素の検索、および線形テーブルの出力

コードエリア

#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct              //顺序表的类型定义
{
	ElemType *Elem;
	int length;
}SqList;
enum Status{ERROR,OK};

//构造一个空的顺序表
Status InitList_Sq(SqList &L)         
{
	L.Elem=(ElemType *)malloc(sizeof(ElemType));  //为顺序表分配空间
	if(!L.Elem)
		return ERROR;    //存储分配失败
	L.length=0;         //空表长度为0
	return OK;
}


//判断是否为空表
Status ListEmpty(SqList L)      
{
   if(L.length==0)
   return OK;

   return ERROR;
}

//在第i个位置插入e
Status ListInsert_Sq(SqList &L,int i,ElemType e)  
{
	if(i<0||i>L.length+1)  //格外注意:插入即后移
	{
		return ERROR;   //位置不合理
	}
	for(int j=L.length-1;j>=i-1;j--)
	{
        L.Elem[j+1]=L.Elem[j];
	}
	L.Elem[i-1]=e;   //注意:因为是位置,不是下标
	L.length++;
	return OK;
}

//删除第i个元素
Status ListDelete_Sq(SqList &L,int i) 
{
	if(i<0||i>L.length+1)
    return ERROR;
	for(int j=i-1;j<L.length-1;j++)
	{
		L.Elem[j]=L.Elem[j+1];
	}
	L.length--;
	return OK;
}

//返回线性表长度
int ListLength(SqList L) 
{
 return L.length;
}

//返回第一个与e满足关系的位置
Status LocateElem(SqList L,ElemType e,int *z)   
{
  int i,flag=0;
  if(L.length==0)
  return ERROR;
   
  for(i=0;i<L.length;i++)
  {
    if(L.Elem[i]==e)
    {
     flag=1;
     break;
    }
  }
  
  if(flag)
  
  {
  *z=i+1;   
  printf("位置为:%d\n",i+1);
  else
	  printf("没有这个元素\n");
  return OK;
}

//找到第i个元素
Status GetElem(SqList L,int i,ElemType *e)  
{
  if(L.length==0||i<0||i>L.length+1)
  {
   return ERROR;
  }
  else
  *e=L.Elem[i-1];
  return OK;
} 

//输出线性表的元素
Status Print(SqList L) 
{
  int i;
  printf("现在的顺序表为:\n");
  if(L.length)
  {
  for(i=0;i<L.length;i++)
    {
      printf("%d",L.Elem[i]);
    }
   printf("\n");
  }
  else  if(L.length==0)
	  printf("顺序表被清除\n");
  else
	  printf("线性表被销毁\n");
	return OK;
}

int main()
{
	SqList L;
	ElemType e;
	int i,z;

	if(InitList_Sq(L))  //初始化
	{
		printf("构建顺序线性表成功\n");
	}
	printf("输入顺序表长度\n");
	scanf("%d",&L.length);
	printf("input what you want to enter\n");  //输入数据
	for(i=0;i<L.length;i++)
	{
		scanf("%d",&L.Elem[i]);   //注意加&
	}

	printf("在第i个位置插入数据e,现在输入e和位置\n");
	scanf("%d %d",&e,&i);
	ListInsert_Sq(L,i,e);
	Print(L);

	printf("顺序表目前的长度为:%d\n",ListLength(L));

	printf("删除第i个数据,现在输入位置\n");
	scanf("%d",&i);
	ListDelete_Sq(L,i);
    Print(L);
    
	printf("输入i,顺序表中第i个元素为:\n");
	scanf("%d",&i);
	GetElem(L,i,&e);
    printf("%d\n",e);

	printf("输入一个数据e,在顺序表中寻找第一个与e满足关系的位置\n");
	scanf("%d",&e);
	LocateElem(L,e,&z);  //注意格式

	return 0;
}

テストエリア

ここに画像の説明を挿入

公開された57件の元の記事 気に入った54 訪問2350

おすすめ

転載: blog.csdn.net/September_C/article/details/104999324