静态顺序表

原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/JK-HYJ/p/6807132.html

定义一张顺序表也就是在内存中开辟一段连续的存储空间,并给它一个名字进行标识。

A

 
 
 
 
 
 
 
 

 0000H

 0001H

 

  ……

 

 

 

如上图所示,A是其唯一的名称标识,右边的是其内存空间地址(其间隔由数据的存储类型决定)。

  静态定义一张顺序表的方法如下:

#define MaxSize 100
ElemType Sqlist[MaxSize];
int len;

ElemType是指定顺序表的类型,len为顺序表的长度。有时候为了方便也可以直接定义,如下:

int a[100];

顺序表的插入元素的思想是:将元素插入在表中的第i个位置,第i个以及i个位置之后的元素一次向后移动一位。代码如下:

/*静态顺序表的各种操作
**
**向顺序表中插入元素
**参数Sqlist:表首地址
**参数*len:表的长度
**参数i:插入元素的位置 从1开始
**参数x:待插入的元素值
*/
void insertElem(int Sqlist[],int *len,int i,int x)
{
int t;
if(*len==MaxSize || i<1 || i>*len+1)
{
    printf("This insertnis illegal \n");
    return;
}                                        /*非法插入*/

for(t=*len-1;t>=i-1;t--)
   Sqlist[t+1]=Sqlist[t];
Sqlist[i-1]=x;
*len+=1;                                /*插入元素*/
}

顺序表的删除元素的思想是:将表中的第i个位置的元素删除,第i个位置之后的元素一次向前移动一位。代码如下:

/**向顺序表中删除元素
**参数Sqlist:表首地址
**参数*len:表的长度
**参数i:删除元素的位置
*/

void DelElem(int Sqlist[],int *len,int i)
{
    int j;
    if(i<1 || i>*len)
    {
        printf("This delete is illegal \n");
        return;
    }
    for(j=i;j<=*len;j++)
        Sqlist[j-1]=Sqlist[j];        /*将第i个元素之后的元素向前移*/
    *len=*len-1;
}

代码示例:

#include "stdio.h"
#define MaxSize 10
/*静态顺序表的各种操作
**
**向顺序表中插入元素
**参数Sqlist:表首地址
**参数*len:表的长度
**参数i:插入元素的位置 从1开始
**参数x:待插入的元素值
*/
void insertElem(int Sqlist[],int *len,int i,int x)
{
int t;
if(*len==MaxSize || i<1 || i>*len+1)
{
    printf("This insertnis illegal \n");
    return;
}                                        /*非法插入*/

for(t=*len-1;t>=i-1;t--)
   Sqlist[t+1]=Sqlist[t];
Sqlist[i-1]=x;
*len+=1;                                /*插入元素*/
}

/**向顺序表中删除元素
**参数Sqlist:表首地址
**参数*len:表的长度
**参数i:删除元素的位置
*/

void DelElem(int Sqlist[],int *len,int i)
{
    int j;
    if(i<1 || i>*len)
    {
        printf("This delete is illegal \n");
        return;
    }
    for(j=i;j<=*len;j++)
        Sqlist[j-1]=Sqlist[j];        /*将第i个元素之后的元素向前移*/
    *len=*len-1;
}


/*测试函数*/
void main()
{
    int Sqlist[MaxSize];
    int len;
    int i;
    printf("Please input six integer number\n");
    len=6;
    for(i=0;i<len;i++)
        scanf("%d",&Sqlist[i]);
    for(i=0;i<len;i++)
        printf("%d ",Sqlist[i]);
    printf("\nThe spare length is %d \n",MaxSize-len);  /*显示表中剩余的空间*/
    printf("insert number 3 into Sqlist[3] \n");
    insertElem(Sqlist,&len,3,0);                        /*在表中的第三个位置插入0*/
    for(i=0;i<len;i++)                                  /*输出插入后的表*/
    printf("%d ",Sqlist[i]);
    printf("\nThe spare length is %d \n",MaxSize-len);
    printf("delete number from Sqlist[6] \n");
    DelElem(Sqlist,&len,6);
    for(i=0;i<len;i++)                                  /*输出删除后的表*/
        printf("%d ",Sqlist[i]);
    printf("\nThe spare length is %d \n",MaxSize-len);
    return;
}
点击展开代码

运行结果显示:

 

posted @ 2017-05-04 14:55  JK_HYJ  阅读(539)  评论(0编辑  收藏  举报