首页 > 代码库 > 数组实现静态表

数组实现静态表

1.顺序线性表的建立、插入、删除及查找。

2.具体要求:

(1)建立含n个数据元素的顺序表;

(2)可以在线性表的任意合法位置i插入一个数据元素;

(3)可以删除线性表在任意合法位置i上的一个数据元素;

(4)可以删除线性表中所有值为e的数据元素,并知道删除了几个这样的元素;

(5)可以查找第i个位置的元素;

(6)可以查找值为e的元素在线性表中的第一个位置i;

(7)可以输出该表中各元素的值;

(8)可以输出顺序表的长度(即数据元素的个数);

建立工程

Header Files:<SqList.h>

#ifndef SQLIST_H#define SQLIST_H#define MAXSIZE 30          //定义线性表的最大长度            typedef  int  ElemType;             //线性表中存放整型元素 typedef struct{   ElemType elem[MAXSIZE];       //线性表   int length;                               // length指示当前线性表的长度}SqList;void initial(SqList &);                  //初始化线性表void print(SqList &);                   //输出函数bool insert(SqList &,int,int);       //插入元素bool del(SqList &,int ,int & );      //删除元素int locate(SqList ,int );                //查找 #endif

Sourse Flies:

主函数文件:<main.cpp>

#include <stdio.h>#include <SqList.h>void main(){    SqList S;                        //S为一线性表    int loc,e,flag=1;    char j;    bool temp;        initial(S);                        //初始化线性表    while(flag)     {        printf("请选择:\n");        printf("1.显示所有元素  2.插入一个元素 3.删除一个元素 4.查找一个元素\n");        printf("                       5.退出程序           \n");        scanf(" %c",&j);        switch(j){            case 1:print(S); break; //显示所有元素            case 2:                {                printf("请输入要插入的元素(一个字符)和插入位置:\n");                printf("格式:位置,整数;例如:1,-2\n");                scanf(" %d,%d",&loc,&e);  //输入要插入的元素和插入的位置                temp=insert(S,loc,e);     //插入                if(temp==false)  printf("插入失败!\n");  //插入失败                   else  {printf("插入成功!\n");   print(S);}  //插入成功                break;                }            case 3:                {                    printf("请输入要删除元素的位置:");                    scanf("%d",&loc);                     //输入要删除的元素的位置                    temp=del(S,loc,e);                    //删除                    if(temp==true) printf("删除了一个元素:%d\n",e); //删除成功                    else printf("该元素不存在!\n");                 //删除失败                    print(S);                    break;                }            case 4:                {                    printf("请输入要查找的元素:");                    scanf(" %d",&e);      //输入要查找的元素                    loc=locate(S,e);      //定位                    if(loc!=-1)                         printf("该元素所在位置:%d\n",loc+1); //显示该元素位置                    else                            printf("%d 不存在!\n",e);           //当前元素不存在                    break;                }            default:flag=0;printf("程序结束,按任意键退出!\n");        }        getchar();    }}

函数实现:<Sqlist.cpp>

#include "stdio.h"#include "SqList.h"void initial(SqList &v)                        //初始化线性表{     int i;     printf("请输入初始线性表长度:n=");    //输入线性表初始化时的长度     scanf("%d", &v.length);     printf("请输入从1到%d的各元素(整数)\n",v.length);     getchar();     for(i=0; i<v.length; i++)          scanf("%d",&v.elem[i]);            //输入线性表的各元素    }void print(SqList &v){     int i;     for(i=0; i<v.length; i++)         printf("%d\n",v.elem[i]);}bool insert(SqList &v,int loc,int e)        //插入一个元素,成功返回True,失败返回False{     int i;     if((loc<1)||(loc>v.length+1))     {         printf("插入位置不合理!\n");         //位置不合理         return false;     }     else if(v.length>=MAXSIZE)                //线性表已满     {               printf("线性表已满!\n");         return false;     }      else      {              for(i=v.length-1;i>=loc-1;i--)               v.elem[i+1]=v.elem[i];        //其后元素依次后移           v.elem[loc-1]=e;                    //插入元素           v.length++;                        //线性表长度加一           return true;     }}bool del(SqList &v,int loc,int &e) {                                            //删除一个元素,成功返回True,并用ch返回该元素值,失败返回False     int j;     if(loc<1||loc>v.length)          return false;                        //删除位置不合理      else      {         e=v.elem[loc-1];                    //e取得该元素值         for(j=loc-1;j<=v.length-1;j++)             v.elem[j]=v.elem[j+1];            //其后元素依次前移         v.length--;                        //线性表长度减一         return true;     }}int locate(SqList v,int e) {                                            //在线性表中查找ch的位置,成功返回其位置,失败返回-1    int i=0;    while(i<v.length&&v.elem[i]!=e)          i++;                                //当前位置后移,直到找到为止    if(v.elem[i]==e)          return i;                            //找到当前元素    else  return(-1);}

 

一般采用动态实现数据存储。数组的好处,直接给出下标即可找到下标相应的数据。下标为零位置不再存储数据。

 

数组实现静态表