码迷,mamicode.com
首页 > 其他好文 > 详细

数据结构-------顺序表的实现

时间:2016-01-16 07:41:33      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:数据结构--静态顺序表


2016.1-14

顺序表的实现

.h文件

#pragma once

#include<stdio.h>

#include<string.h>

#include<assert.h>

#define MAX_SIZE 1000//预定义顺序表为1000

typedef int DataType;//控制以后数据类型

typedef struct SeqList//定义一个结构体

{

DataType array[MAX_SIZE];//定义一个数组

size_t size;//标识有效数据的个数

}SeqList;

 

void pushBack(SeqList* pSeq,DataType x);//在当前顺序表的尾部插入一个数据

void popBack(SeqList* pSeq);

 

void pushFront(SeqList* pSeq,DataType x);

void popFront(SeqList* pSeq);

 

void InitSeqList( SeqList* pSeq);

void printSeqList(SeqList* pSeq);

 

void InsertSeqList(SeqList* pSeq,int pos , DataType x);

int Find(SeqList* pSeq,DataType x);//寻找某个数据

int Erase(SeqList* pSeq,size_t pos);//删除某个位置的数据

int Remove(SeqList* pSeq,DataType x);//找到某个数据并且删除

int RemoveAll(SeqList* pSeq,DataType x);//删除顺序表内出现的重复数据

int BinarySearch(SeqList* pSeq,DataType x);//二分查找

void ReverseList(SeqList* pSeq);//翻转顺序表

 

void pushBack(SeqListpSeq,DataType x)//在当前顺序表的尾部插入一个数据

{   //1检查参数

//2检查顺序表是否已满

//3完成功能

assert(pSeq);

if(pSeq->size==MAX_SIZE)

{

printf("顺序表以满\n");

return;

}

pSeq->array[pSeq->size]=x;

pSeq->size++;

 

}

void popBack(SeqListpSeq)

{

assert(pSeq);

if(pSeq->size<=0)

{

printf("顺序表为空\n");

return;

}

   pSeq->size--;

}

void InitSeqList( SeqListpSeq)

{

memset(pSeq->array,0,sizeof(DataType)*MAX_SIZE);

pSeq->size=0;//初始化局部变量,并不印象外边的东西所以必须通过传址调用,通过指针改变外边的东西

}

void printSeqList(SeqListpSeq)

{

    int i=0;

assert(pSeq);

for(i=0;i<pSeq->size-1;i++)

{

printf("%d",pSeq->array[i]);

}

printf("\n");

}

void pushFront(SeqListpSeq,DataType x)

{

int i=0;

assert(pSeq);

if(pSeq->size==MAX_SIZE)

{

printf("List is Full\n");

return;

}

for(i=pSeq->size-1;i>0;i--)

{

pSeq->array[i+1]=pSeq->array[i];

}

pSeq->array[0]=x;

++pSeq->size;

}

void popFront(SeqListpSeq)

{

int i=0;

assert(pSeq);

if(pSeq->size<=0)

{

printf("List is empty");

return;

}

for(i=0;i<pSeq->size;i++)

{

pSeq->array[i]=pSeq->array[i+1];

}

--pSeq->size;

}

void InsertSeqList(SeqListpSeq,size_t pos , DataType x)

//size_t 无符号整形不用检查POS是否大于零

{

int i=0;

    assert(pSeq);

    assert(pos<pSeq->size);

    if(pSeq->size>=MAX_SIZE)

{

printf("List is Full\n");

return;

}

for(i=pSeq->size-1;i>=(int)pos;i--)

{

pSeq->array[i+1]=pSeq->array[i];

 

}

pSeq->array[pos]=x;

++pSeq->size;

}

 

int Find(SeqListpSeq,DataType x)

{

 

 

}

 

int Find(SeqListpSeq,DataType x)//寻找某个数据

{

int i=0;

   assert(pSeq);

   for(i=0;i<pSeq->size;i++)

   {

   if(pSeq->array[i]==x)

       return i;

   }

   return -1;

}

int Erase(SeqListpSeq,size_t pos)//删除某个位置的数据

{  

int i=pos+1;

   assert(pSeq);

   assert(pos<=pSeq->size);

   for(i=pos+1;i< pSeq->size;i++)

   {

   pSeq->array[i-1]=pSeq->array[i];

   }

   --pSeq->size;

}

int Remove(SeqListpSeq,DataType x)//找到某个数据并且删除

{

   int pos;

   assert(pSeq);

   pos=Find(pSeq,x);

   if(pos!=-1)

   {

   Erase(pSeq,pos);

   }

 

}

int RemoveAll(SeqListpSeq,DataType x)//删除顺序表内出现的重复数据

{

int pos;

   assert(pSeq);

   pos=Find(pSeq,x);

   while(pos!=-1)

   {

   Erase(pSeq,pos);

   pos=Find(pSeq,x);

   }

 

}

 

int BinarySearch(SeqListpSeq,DataType x)//二分查找

{

int left=0;

int right=pSeq->size;

assert(pSeq);

while(left<right)

{

int mid=(left+right)/2;

if(x>pSeq->array[mid])

{

left=mid+1;

}

else if (x<pSeq->array[mid])

{

right=mid-1;

}

else

{

return mid;

    }

}

 

return -1;

}

 

void ReverseList(SeqListpSeq)//翻转顺序表

{

int start=0;

int end=pSeq->size-1;

while(start<end)

{

DataType tmp=pSeq->array[start];

pSeq->array[start]=pSeq->array[end];

pSeq->array[end]=tmp;

start++;

end--;

}

}

Test.c文件

#include<stdio.h>

#include"SeqList.h"//由于这里的测试函数大同小异,所以再次只罗列出一部分

void Test1( )

{

 

SeqList seq;

InitSeqList(&seq);//初始化线性表

 

 pushBack(&seq,1);//尾插法插入数据

 pushBack(&seq,2);

 pushBack(&seq,3);

 pushBack(&seq,4);

 pushBack(&seq,5);

 pushBack(&seq,6);

 

 printSeqList(&seq);//打印数据

  popBack(&seq);

  popBack(&seq);

  popBack(&seq);

  popBack(&seq);

  popBack(&seq);

  popBack(&seq);

 

 printSeqList(&seq);//打印数据

 

}

int main()

{

 

 

 

}


数据结构-------顺序表的实现

标签:数据结构--静态顺序表

原文地址:http://10808695.blog.51cto.com/10798695/1735486

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!