C语言实现顺序表(静态)

静态顺序表

头文件

#ifndef SeqList_h
#define SeqList_h

typedef int DataType;

#define MAX_SIZE 10      //顺序表的容量,可调整

typedef struct SeqList
{
    DataType _array[MAX_SIZE];
    int _size;            //已存元素个数,即下一个元素的位置
}SeqList;

void SeqListInit(SeqList* pSeq);                    //初始化
void SeqListPushBack(SeqList* pSeq, DataType data); //尾部添加
void SeqListPopBack(SeqList* pSeq);                 //尾部删除
void SeqListPushFront(SeqList* pSeq, DataType data);//头部添加
void SeqListPopFront(SeqList* pSeq);                //头部删除
void SeqListInsert(SeqList* pSeq, int pos, DataType data);//指定位置插入
void SeqListErase(SeqList* pSeq, int pos);          //删除指定位置元素
void SeqListRemove(SeqList* pSeq, DataType data);   //删除指定元素
void SeqListRemoveAll(SeqList* pSeq, DataType data);//删除所有元素
int SeqListFind(SeqList* pSeq, DataType data);      //查找某元素返回位置
void SeqListSize(SeqList* pSeq);                    //查看当前元素个数
//------------
void PrintList(SeqList* pSeq);                      //打印顺序表
void BubbleSort(SeqList* pSeq);                     //冒泡排序
void SelectSort(SeqList* pSeq);                     //选择排序
void BinarySearch(SeqList* pSeq, DataType data);    //折半查找

#endif /* SeqList_h */

源文件

#include <stdio.h>
#include "SeqList.h"

void SeqListInit(SeqList* pSeq)
{
    for (int i = 0; i<MAX_SIZE; i++)
    {
        pSeq->_array[i] = 0;
        pSeq->_size = 0;
    }
}

void SeqListPushBack(SeqList* pSeq, DataType data)
{
    pSeq->_array[pSeq->_size] = data;
    pSeq->_size ++;
}

void SeqListPopBack(SeqList* pSeq)
{
    pSeq->_size --;
}

void SeqListPushFront(SeqList* pSeq, DataType data)
{
    if (pSeq->_size == MAX_SIZE)
    {
        printf("size==MAX_SIZE can't Push!\n");
        return;
    }
    for (int i = pSeq->_size; i>0; i--)
    {
        pSeq->_array[i] = pSeq->_array[i-1];
    }
    pSeq->_array[0] = data;
    pSeq->_size++;
}

void SeqListPopFront(SeqList* pSeq)
{
    for (int i = 0; i<pSeq->_size-1; i++)
    {
        pSeq->_array[i] = pSeq->_array[i+1];
    }
    pSeq->_size--;
}

void SeqListInsert(SeqList* pSeq, int pos, DataType data)
{
    if (pSeq->_size == MAX_SIZE)
    {
        printf("size==MAX_SIZE can't Push!\n");
        return;
    }
    for (int i = pSeq->_size; i>pos; i--)
    {
        pSeq->_array[i] = pSeq->_array[i-1];
    }
    pSeq->_array[pos] = data;
    pSeq->_size++;
}

void SeqListErase(SeqList* pSeq, int pos)
{
    if (pos>=0 && pos < pSeq->_size)
    {
        for (int i = pos; i<pSeq->_size-1; i++)
        {
            pSeq->_array[i] = pSeq->_array[i+1];
        }
        pSeq->_size--;
    }
}

int SeqListFind(SeqList* pSeq, DataType data)
{
    for (int i = 0; i<pSeq->_size; i++)
    {
        if (data == pSeq->_array[i])
        {
            return i;
        }
    }
    return -1;
}


void SeqListRemove(SeqList* pSeq, DataType data)
{
    //    for (int i = 0; i<pSeq->_size; i++)
    //    {
    //        if (data == pSeq->_array[i])
    //        {
    //            SeqListErase(pSeq, i);
    //        }
    //    }
    int pos = SeqListFind(pSeq, data);
    if (pos >=0) {
        SeqListErase(pSeq, pos);
    }
}

void SeqListRemoveAll(SeqList* pSeq, DataType data)
{
    for (int i = 0; i<pSeq->_size; i++)
    {
        if (pSeq->_array[i] == data)
        {
            SeqListErase(pSeq, i);
            i--;
        }
    }
}


//-----------------
void PrintList(SeqList* pSeq)
{
    for (int i = 0; i<pSeq->_size; i++)
    {
        printf("%d ",pSeq->_array[i]);
    }
    printf("\n");
}
void swap(DataType* p1,DataType* p2)
{
    DataType tmp = *p1;
    *p1 = *p2;
    *p2 = tmp;

}

void BubbleSort(SeqList* pSeq)
{
    for (int i = 0; i<pSeq->_size; i++)
    {
        for (int j = 0; j<pSeq->_size-1-i; j++)
        {
            if (pSeq->_array[j]<pSeq->_array[j+1])
            {
                swap(pSeq->_array+j, pSeq->_array+j+1);

            }
        }
    }
}

void SelectSort(SeqList* pSeq)
{
    for (int i = 0; i<pSeq->_size-1; i++)
    {
        for (int j = i+1; j<pSeq->_size; j++)
        {
            if (pSeq->_array[i]<pSeq->_array[j])
            {
                swap(pSeq->_array+i, pSeq->_array+j);
            }
        }
    }
}

void BinarySearch(SeqList* pSeq, DataType data)
{
    int start = 0;
    int end = pSeq->_size-1;
    while (start<=end)
    {
        int mid = (start+end)/2;
        if (data == pSeq->_array[mid])
        {
            printf("the pos = %d\n",mid);
            return;
        }
        else if (data < pSeq->_array[mid])
        {
            end = mid-1;
        }
        else
        {
            start = mid+1;
        }
    }
    printf("Can't find!\n");
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
用模板方式实现顺序的合并 #include "stdafx.h" #include #define MaxSize 100 template class SeqList { private: T * Mylist; int ListMaxSize; int Length; public: SeqList(int ListMaxSize=MaxSize); //构造函数 ~SeqList(void);// 析构函数 bool SLIsEmpty(void); // 判断是否为空 bool SLIsFull(void);//判断是否满 int ListLength(void){return Length;}//求长度 T SLGetElem(int i); // 取得第i个元素的值 int SLFind(T & x,int index); //查找值为x的结点 bool SLInsert(int i,T & x); // 在的第i个位置插入新结点 bool SLDelete(int i); // 删除的第i个位置的结点 void CreateList(int num);// 创建一个包含num个元素的顺序 void SLPrint(); //输出全体元素 }; template SeqList ::SeqList(int listMaxSize) //初始化顺序 { if(listMaxSize>0){ ListMaxSize=listMaxSize; Length=0; Mylist=new T [ListMaxSize]; // 创建连续的空间 } } template SeqList ::~SeqList(void) { delete [] Mylist;//删除,释放空间 } template void SeqList ::CreateList(int num) { T x; Length=0; cout << "请输入"<<num<<"个整数数据元素以创建一个线性"<<endl; for (int i=0;i>x; Mylist[i]=x; Length++; } } template bool SeqList ::SLIsEmpty(void) // 判断是否为空 { return (Length<=0)?true:false; //空则返回真(true),否则返回假(false) } template bool SeqList ::SLIsFull(void)//判断是否满 { return(Length>=ListMaxSize)?true:false; //满则返回真(true),否则返回假(false) } template T SeqList ::SLGetElem(int i) // 取得第i个元素的值 { return(iLength-1)?-1:Mylist[i]; } template int SeqList ::SLFind(T & x,int index) //查找值为x的结点 { for(int i=0;i<index;i++) if(Mylist[i]==x) return i+1; return -1;//没有找到给定元素 } template bool SeqList ::SLInsert(int i,T & x) // 在的第i个位置插入新结点 { if(iLength) {cout <<"参数i不合理!" <<endl; return false;} else if(Length==ListMaxSize) {cout<< "已满,无法插入!"<i;j--) Mylist[j]=Mylist[j-1]; Mylist[j]=x; Length++; return true; } } template <clas

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值