数组实现静态表

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);
}

 

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

 

posted @ 2014-10-03 19:54  肉球  阅读(412)  评论(0编辑  收藏  举报