天天看点

C语言实现数据结构线性表之顺序表

来一个C语言版本顺序表完整操作

#include <stdio.h>

#define  MAXLEN  100        	/*定义常量MAXLEN为                                                      100表示存储空间总量*/
typedef  int  DataType;  /*定义DataType为int类型*/ 

typedef  struct               	          /*顺序表存储类型*/
{   DataType   data[MAXLEN];     /*存放线性表的数组*/
    int  Length;              	         /*Length是顺序表的长度*/
}SeqList;

SeqList  L;                   	         /*定义一个顺序表L*/ 

void  InitList( SeqList  *L )
{   /*初始化顺序表L函数*/ 
    L->Length=0;      /*初始化顺序表为空*/
} 

void CreateList(SeqList *L,int n)
{   /*建立顺序表并输入多个元素函数*/
    int i;
    printf("请输入%d个整数:",n);
    for(i=0;i<n;i++)
        scanf("%d",&L->data[i]);
    L->Length=i;               /*设线性表的长度为i*/
} 

int GetElem(SeqList  *L, int i, DataType *x)
{  /*获取顺序表中第i位中元素函数*/
   if (i<1 || i>L->Length)  /*当查找位置i不正确时*/
        return  0;
   else
   {    *x = L->data[i-1];    /*将顺序表中第i个元素值赋给指针x所指变量*/
        return  1;
   }
}

int Locate(SeqList *L, DataType x)
{   /*在顺序表L中定位元素x函数*/
    int i=0;
    while(i<L->Length && L->data[i]!= x)
        i++;
    if (i>=L->Length) 
        return 0;
    else
        return i+1;                     /*返回的是元素位置*/
} 


int  InsElem(SeqList *L, int i, DataType x)
{   /*在顺序表L中在第i位中插入新元素x函数*/
	int j;
    if (L->Length>=MAXLEN)
    {   printf ("顺序表已满!"); 
        return -1;                           /*表满,不能插入*/
    }
    if (i<1 || i>L->Length+1) /*检查给定的插入位置的正确性*/
    {   printf("插入位置出错!");
        return 0; 
    }

	if (i == L->Length+1)    /*插入的位置为表尾,则不需移动直接插入即可*/
    {   L->data[i-1]=x;
        L->Length++;
        return  1;            
    }
    for (j=L->Length-1; j>=i-1; j--) /*插入表中某位置,则插入点后各结点后移*/ 
        L->data[j+1]=L->data[j];
    L->data[i-1]=x;                      	/*新元素插入*/
    L->Length++;                           	/*顺序表长度增1 */
    return 1;                              	/*插入成功,返回*/
} 

int DelElem (SeqList *L, int i,  DataType *x)  
{   /*在顺序表L中删除第i位元素函数*/
    int  j;
    if (L->Length==0)
    {  printf ("顺序表为空!");
       return 0;    /*表空,不能删除*/
    }
    if (i<1 || i>L->Length) /*检查是否空表及删除位置的合法性*/
    {  printf ("不存在第i个元素");
       return 0;
    }

	   *x= L->data[i-1]; /*用指针变量*x返回删除的元素值*/
    for(j=i;j<L->Length;j++)        	/*结点移动*/
       L->data[j-1]=L->data[j];
    L->Length--;            /*顺序表长度减1*/
    return 1;                  /*删除成功,返回*/
} 


void DispList(SeqList *L)
{   /*显示输出顺序表L的每个元素函数*/
    int i;
    for(i=0;i< L->Length;i++)
        printf("%5d ", L->data[i]);
} 


int main()
{
	int r,index,first;
	//初始化空表
	InitList(&L);
	//像表中写入5个整数
	CreateList(&L,5);
	printf("L的长度为%d\n",L.Length);
	//按位置查找
	GetElem(&L,3,&r);
	printf("第3个元素是%d\n",r);
	//按值查找
	index = Locate(&L,30);
	printf("30是第%d个元素\n",index);
	//插入100在第1个位置
	InsElem(&L,1,100);
	printf("第1个元素是%d第2个元素是%d\n",L.data[0],L.data[1]);
	//删除元素
	DelElem(&L,1,&first);
	printf("删除了第1一个元素%d,删除以后第1个元素是%d\n",first,L.data[0]);
	//展示元素内容
	DispList(&L);
	return 0;
}
           

相关阅读:

数据结构

顺序表

链表

顺序栈

继续阅读