动态顺序表(C语言实现)
2017-05-31 01:03
776 查看
数据结构:
方法:
typedef int DataType,*pDataType; typedef struct Seqlist { pDataType pdata;//指向动态开辟的区域 int sz;//有效个数 int capacity;//容量 } Seqlist,*pSeqlist;
方法:
void InitSeqlist(pSeqlist ps);//初始化 void DestroySeqlist(pSeqlist ps);//销毁 void PushBack(pSeqlist ps, DataType d);//后插 void PrintBack(pSeqlist ps);//打印 void PopBack(pSeqlist ps);//后删 void PushFront(pSeqlist ps,DataType d);//前插 void PopFront(pSeqlist ps);//前删 void Insert(pSeqlist ps, int pos, DataType d);//指定位置插入 int Find(pSeqlist ps, DataType d);//遍历排序 void Remove(pSeqlist ps, DataType d);//删除 void ReverseSeqlist(pSeqlist ps);//逆序 void SortSeqlist(pSeqlist ps);//排序 int BinarySearch(pSeqlist ps, DataType d);//二分查找
代码实现:
test.c
#include"Seqlist_D.h" void test() { Seqlist seqlist; int ret = 0; InitSeqlist(&seqlist);//初始化 PushBack(&seqlist, 1);//后插 PushBack(&seqlist, 2);//后插 PushBack(&seqlist, 3);//后插 PushBack(&seqlist, 4);//后插 PushBack(&seqlist, 5);//后插 PrintBack(&seqlist);//打印 PopBack(&seqlist);//后删 PushFront(&seqlist, 2);//前插 PrintBack(&seqlist);//打印 PopFront(&seqlist);//前删 PrintBack(&seqlist);//打印 ret = Find(&seqlist, 2);//遍历排序 printf("%d \n",ret); Insert(&seqlist, 1, 5);//指定位置插入 PrintBack(&seqlist);//打印 Remove(&seqlist, 2);//删除 PrintBack(&seqlist);//打印 ReverseSeqlist(&seqlist);//逆序 PrintBack(&seqlist);//打印 SortSeqlist(&seqlist);//排序 PrintBack(&seqlist);//打印 ret = BinarySearch(&seqlist, 2);//二分查找 printf("%d \n",ret); } int main() { test(); return 0; }
Seqlist_D.h
#ifndef __SEQLIST_D_H__
#define __SEQLIST_D_H__
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>
#define DEFALUT_SZ 3//初始化分配元素个数
#define DEFALUT_INC 2//增容时增加元素个数
#define FORMAT "%d "
typedef int DataType,*pDataType; typedef struct Seqlist { pDataType pdata;//指向动态开辟的区域 int sz;//有效个数 int capacity;//容量 } Seqlist,*pSeqlist;
void InitSeqlist(pSeqlist ps);//初始化 void DestroySeqlist(pSeqlist ps);//销毁 void PushBack(pSeqlist ps, DataType d);//后插 void PrintBack(pSeqlist ps);//打印 void PopBack(pSeqlist ps);//后删 void PushFront(pSeqlist ps,DataType d);//前插 void PopFront(pSeqlist ps);//前删 void Insert(pSeqlist ps, int pos, DataType d);//指定位置插入 int Find(pSeqlist ps, DataType d);//遍历排序 void Remove(pSeqlist ps, DataType d);//删除 void ReverseSeqlist(pSeqlist ps);//逆序 void SortSeqlist(pSeqlist ps);//排序 int BinarySearch(pSeqlist ps, DataType d);//二分查找
#endif//__SEQLIST_D_H__
Seqlist_D.c
#include"Seqlist_D.h" void IncreatCatacity(pSeqlist ps)//增容 { pDataType tmp = NULL; assert(ps != NULL); tmp = (pDataType)realloc(ps->pdata, (ps->capacity + DEFALUT_INC)*sizeof(DataType)); if (tmp == NULL) { printf("增容失败!\n"); } else { ps->pdata = tmp; ps->capacity += DEFALUT_INC; } } void InitSeqlist(pSeqlist ps)//初始化 { pDataType tmp = NULL; assert(ps != NULL); tmp = (pDataType)malloc(DEFALUT_SZ*sizeof(DataType)); if (tmp == NULL) { printf("初始 c593 化失败!\n"); } else { ps->pdata = tmp; ps->capacity = DEFALUT_SZ; ps->sz = 0; } } void DestroySeqlist(pSeqlist ps)//销毁 { assert(ps != NULL); ps->sz = 0; ps->capacity = 0; free(ps->pdata); } void PushBack(pSeqlist ps, DataType d)//后插 { assert(ps != NULL); if (ps->sz == ps->capacity) { IncreatCatacity(ps); ps->pdata[ps->sz] = d; ps->sz++; } else { ps->pdata[ps->sz] = d; ps->sz++; } } void PrintBack(pSeqlist ps)//打印 { int i = 0; assert(ps != NULL); for (i = 0; i < ps->sz; i++) { printf(FORMAT, ps->pdata[i]); } printf("\n"); } void PopBack(pSeqlist ps)//后删 { assert(ps != NULL); if (ps->sz == 0) { printf("顺序表为空,删除失败!\n"); } else { ps->sz--; } } void PushFront(pSeqlist ps, DataType d)//前插 { int i = 0; assert(ps != NULL); if (ps->capacity == ps->sz) { IncreatCatacity(ps); for (i = ps->sz; i > 0; i--) { ps->pdata[i] = ps->pdata[i - 1]; } ps->pdata[0] = d; ps->sz++; } else { for (i = ps->sz; i > 0; i--) { ps->pdata[i] = ps->pdata[i - 1]; } ps->pdata[0] = d; ps->sz++; } } void PopFront(pSeqlist ps)//前删 { int i = 0; assert(ps != NULL); if (ps->sz == 0) { printf("顺序表为空,删除失败!\n"); } else { for (i = 0; i < ps->sz - 1; i++) { ps->pdata[i] = ps->pdata[i + 1]; } ps->sz--; } } void Insert(pSeqlist ps, int pos, DataType d)//指定位置插入 { int i = 0; assert(ps != NULL); if (ps->sz == ps->capacity) { IncreatCatacity(ps); if ((pos<0)||(pos>ps->sz)) { printf("插入位置有误!\n"); } else { for (i = ps->sz; i >pos; i--) { ps->pdata[i] = ps->pdata[i - 1]; } ps->pdata[pos] = d; ps->sz++; } } else { if ((pos<0) || (pos>ps->sz)) { printf("插入位置有误!\n"); } else { for (i = ps->sz; i >pos; i--) { ps->pdata[i] = ps->pdata[i - 1]; } ps->pdata[pos] = d; ps->sz++; } } } int Find(pSeqlist ps, DataType d)//遍历排序 { int i = 0; assert(ps != NULL); for (i = 0; i < ps->sz; i++) { if (ps->pdata[i] == d) return i; } return -1; } void Remove(pSeqlist ps, DataType d)//删除 { int ret = 0; int i = 0; assert(ps != NULL); ret = Find(ps,d); if (ret == -1) { printf("未找到所要删除的元素!\n"); } else { for (i = ret; i < ps->sz - 1; i++) { ps->pdata[i] = ps->pdata[i + 1]; } ps->sz--; } } void ReverseSeqlist(pSeqlist ps)//逆序 { int left = 0; int right = 0; DataType tmp = 0; assert(ps != NULL); right = ps->sz - 1; while (left < right) { tmp = ps->pdata[left]; ps->pdata[left] = ps->pdata[right]; ps->pdata[right] = tmp; left++; right--; } } void SortSeqlist(pSeqlist ps)//排序 { int i = 0; int j = 0; DataType tmp = 0; assert(ps != NULL); for (i = 0; i < ps->sz - 1; i++) { for (j = 0; j < ps->sz - 1 - i; j++) { if (ps->pdata[j] > ps->pdata[j + 1]) { tmp = ps->pdata[j]; ps->pdata[j] = ps->pdata[j + 1]; ps->pdata[j + 1] = tmp; } } } } int BinarySearch(pSeqlist ps, DataType d)//二分查找 { int left = 0; int right = 0; int mid = 0; assert(ps != NULL); right = ps->sz - 1; while (left <= right) { mid = left + ((right - left) >> 1); if (ps->pdata[mid]>d) { right = mid - 1; } else if (ps->pdata[mid]<d) { left = mid + 1; } else { return mid; } } return -1; }
结果贴图:
相关文章推荐
- C语言 顺序表的实现 (动态)
- C语言:动态顺序表的简单实现
- 动态顺序表的相关功能——C语言实现
- C语言实现动态顺序表
- 静态和动态顺序表的实现(c语言)
- 动态顺序栈的C语言实现!
- 线性表的顺序动态存储——C语言实现简单函数
- 利用C语言实现动态顺序表
- 动态分配的顺序线性表的十五种操作—C语言实现
- 动态顺序表-c语言实现
- 动态顺序表的实现(c语言版本)
- 动态分配的顺序线性表的十五种操作—C语言实现
- 【C语言】静态顺序表和动态顺序表的实现
- 【数据结构】C语言实现顺序表(动态顺序表)
- 动态顺序表----C语言实现
- C语言 顺序表的实现 (动态)
- C语言实现动态顺序表的实现代码
- 动态分配的顺序线性表的十五种操作—C语言实现
- c语言实现顺序表(动态)
- (C语言)顺序表之动态实现