模拟实现顺序表

来源:互联网 发布:软件过期怎么修改 编辑:程序博客网 时间:2024/06/06 00:26

在数据结构中有一种存储方式是顺序表,一般表现为数组,使用一组地址连续的存储单元来依次存储数据。它的长度是固定的,在分配内存之前就已经定义了数组的长度。了解顺序表有数组的特性,就可以模拟实现一个静态顺序表


先定义一个结构体,来存放顺序表

"Seqlist.h"

#ifndef __SEQLIST_H__#define __SEQLIST_H__#include<stdio.h>#include<stdlib.h>#include<string.h>#define MAX 100typedef int DataType;typedef struct SeqList{DataType data[MAX];int sz;}Seq,*pSeqList;void PrintSeqlist(pSeqList pSeq);              //打印顺序表void InitSeqList(pSeqList pSeq);               //初始化void PushBack(pSeqList pSeq,DataType x);       //在后边插入一个元素void PopBack(pSeqList pSeq);                   //后边删除的一个元素void PushFront(pSeqList pSeq,DataType x);      //在前边插入一个元素void PopFront(pSeqList pSeq);                  //删除前面的一个元素void Insert(pSeqList pSeq,int pos,DataType x); //指定位置插入元素void Remove(pSeqList pSeq,DataType x);         //删除一个指定的x元素void RemoveAll(pSeqList pSeq,DataType x);      //删除所有指定的x元素void Sort(pSeqList pSeq);                      //排序-冒泡排序int BinarySearch(pSeqList pSeq,DataType x);    //查找某一个元素-二分查找#endif  //__SEQLIST_H__



函数实现模块:"Seqlist.c"
#define _CRT_SECURE_NO_WARNINGS#include"Seqlist.h"void PrintSeqlist(pSeqList pSeq)                   //输出{int i = 0;for(i=0; i<pSeq->sz; i++){printf("%d ",pSeq->data[i]);}printf("\n");}void InitSeqList(pSeqList pSeq)                    //初始化{pSeq->sz=0;memset(pSeq->data,0,sizeof(DataType)*MAX);}void PushBack(pSeqList pSeq,DataType x)            //从后边添加{if(pSeq->sz == MAX){printf("顺序表已满!\n");return;}pSeq->data[pSeq->sz] = x;pSeq->sz++;}void PopBack(pSeqList pSeq)                        //从后边删除{if(pSeq->sz == 0){printf("顺序表已空!\n");return;}pSeq->sz--;}void PushFront(pSeqList pSeq,DataType x)            //从前边添加{int i = 0;if(pSeq->sz == MAX){printf("顺序表已满!");}else{pSeq->sz++;}for(i=pSeq->sz; i>0; i--){pSeq->data[i] = pSeq->data[i-1];}pSeq->data[0] = x;}void PopFront(pSeqList pSeq)                        //从前边删除{int i = 0;if(pSeq->sz == 0){printf("顺序表已空!\n");}for(i=0; i<pSeq->sz; i++){pSeq->data[i] = pSeq->data[i+1];}pSeq->sz--;}void Insert(pSeqList pSeq,int pos,DataType x)        //指定位置插入{int i = 0;if(pSeq->sz == MAX){printf("顺序表已满!\n");}else{pSeq->sz++;}for(i=pSeq->sz; i>pos; i--){pSeq->data[i] = pSeq->data[i-1];}pSeq->data[pos] = x;}void Remove(pSeqList pSeq,DataType x)              //删除一个数据为x的元素{int i = 0;int j = 0;for(i=0; i<pSeq->sz-1; i++){if(x == pSeq->data[i]){for(j=i; j<pSeq->sz; j++){pSeq->data[j] = pSeq->data[j+1];}pSeq->sz--;return;}}}void RemoveAll(pSeqList pSeq,DataType x)           //删除全部数据为x的元素{int i = 0;for(i=0; i<pSeq->sz; i++){Remove(pSeq,x);}}void Sort(pSeqList pSeq)                           //排序------冒泡排序{int i = 0;int j = 0;for(i=0; i<pSeq->sz-1; i++){for(j=0; j<pSeq->sz-1-i; j++){if(pSeq->data[j] > pSeq->data[j+1]){DataType temp = pSeq->data[j];pSeq->data[j] = pSeq->data[j+1];pSeq->data[j+1] = temp;}}}}int BinarySearch(pSeqList pSeq,DataType x)           //二分查找{int left = 0;int right = pSeq->sz-1;printf("请输入要查找的数:");scanf("%d",&x);while(left < right){int mid = (left + right)/2;if(x < pSeq->data[mid]){right = mid-1;}else if(x > pSeq->data[mid]){left = mid+1;}else return mid;}return -1;}


测试模块:"test.c"

#define _CRT_SECURE_NO_WARNINGS#include"Seqlist.h"void test_PushBack(pSeqList pSeq,DataType x)        //后添{PushBack(pSeq,21);PushBack(pSeq,5);PushBack(pSeq,4);PushBack(pSeq,12);PushBack(pSeq,5);PushBack(pSeq,6);PushBack(pSeq,5);PushBack(pSeq,7);}void test_PopBack(pSeqList pSeq)                    //后删{PopBack(pSeq);PopBack(pSeq);}void test_PushFront(pSeqList pSeq,DataType x)      //从前边添加{printf("请输入要添加的数:");scanf("%d",&x);PushFront(pSeq,x);}void test_PopFront(pSeqList pSeq)                  //从前边删除{PopFront(pSeq);}void test_Remove(pSeqList pSeq,DataType x)         //删除一个x元素{printf("输入要删除的x元素:");scanf("%d",&x);Remove(pSeq,x);}void test_RemoveAll(pSeqList pSeq,DataType x)      //删除所有x元素{printf("输入要删除的x元素:");scanf("%d",&x);RemoveAll(pSeq,x);}void test_Sort(pSeqList pSeq)                      //排序{Sort(pSeq) ;}void test_Insert(pSeqList pSeq,int pos,DataType x)   //指定位置插入{printf("请输入要插入的数:");scanf("%d",&x);printf("请输入要插入的数的位置:");scanf("%d",&pos);Insert(pSeq,pos,x);}void test_BinarySearch(pSeqList pSeq,DataType x)     //查找{int ret = 0;printf("请输入要查找到");ret = BinarySearch(pSeq,x);if(ret == -1){printf("不存在此数!\n");}elseprintf("该数的下标 = %d\n",ret);}int main(){DataType x = 0;int pos = 0;Seq seq;InitSeqList(&seq);test_PushBack(&seq,x);//test_PopBack(&seq);//test_PushFront(&seq,x);//test_PopFront(&seq);//test_Insert(&seq,pos,x);//test_Remove(&seq,x);test_RemoveAll(&seq,x);//test_Sort(&seq);//test_BinarySearch(&seq,x);PrintSeqlist(&seq);system("pause");return 0;}




1 0
原创粉丝点击