简单的动态线性表
来源:互联网 发布:企业网盘系统源码 编辑:程序博客网 时间:2024/04/30 06:59
头文件
#ifndef __TEST_H__#define __TEST_H__#include<stdio.h>#include<string.h>#include<assert.h>#include<malloc.h>#define MAX 3 //方便测试给一个小空间typedef int datatype;typedef struct Seqlist{ datatype *_Array; size_t _size; size_t _capasize;}Seqlist;void init(Seqlist *pSeq)//初始化{ pSeq->_Array = (datatype*)malloc(sizeof(datatype)*MAX); memset(pSeq->_Array, 0,sizeof(datatype)*MAX); pSeq->_size = 0; pSeq->_capasize = MAX;}void capacity(Seqlist *pSeq)//空间不足开辟新空间{ datatype *tmp; tmp = (datatype*)malloc(sizeof(datatype)*(pSeq->_capasize)*2); memcpy(tmp, (pSeq->_Array),sizeof(datatype)*(pSeq->_capasize)); free(pSeq->_Array); pSeq->_Array = tmp; pSeq->_capasize = (pSeq->_capasize) * 2;}void PrintfSqelist(Seqlist *pSeq)//打印数据{ assert(pSeq); int i; for (i = 0; i<(int)(pSeq->_size); i++) { printf("%d", (pSeq->_Array)[i]); } printf("\n");}void pushback(Seqlist *pSeq,datatype x)//添加尾部数据{ assert(pSeq); if (pSeq->_size == pSeq->_capasize) { capacity(pSeq); } (pSeq->_Array)[pSeq->_size] = x; pSeq->_size++;}void pushfront(Seqlist *pSeq, datatype x)//添加头部数据{ assert(pSeq); if (pSeq->_size == pSeq->_capasize) { capacity(pSeq); } int i; for (i = (int)(pSeq->_size - 1); i >= 0; i--) { (pSeq->_Array)[i + 1] = (pSeq->_Array)[i]; } (pSeq->_Array)[0] = x; pSeq->_size++;}void popback(Seqlist *pSeq) //删除尾部数据{ assert(pSeq); pSeq->_size--;}void popfront(Seqlist *pSeq) //删除头部数据{ assert(pSeq); int i; for (i = 0; i<(int)(pSeq->_size - 1); i++) { pSeq->_Array[i] = pSeq->_Array[i + 1]; } pSeq->_size--;}int findsign(Seqlist *pSeq, int x) //寻找一个数据找到返回1,否则-1{ assert(pSeq); int i; for (i = 0; i <= (int)(pSeq->_size - 1); i++) { if (pSeq->_Array[i] == x) { return 1; } } return -1;}void erase(Seqlist *pSeq, size_t num) //消除一个位置上面的数据{ assert(pSeq); size_t i; for (i = num-1; i <= (int)(pSeq->_size - 1); i++) { pSeq->_Array[i] = pSeq->_Array[i + 1]; } pSeq->_size--;}void removesign(Seqlist *pSeq, datatype x) //消除第一个找到的x{ assert(pSeq); int i, k; for (i = 0; i <=(int)(pSeq->_size - 1); i++) { if (pSeq->_Array[i] == x) { for (k = i; k < (int)(pSeq->_size - 1); k++) { pSeq->_Array[k] = pSeq->_Array[k + 1]; } pSeq->_size--; return; } } printf("没有此数据");}void removeallsign(Seqlist *pSeq, datatype x) //消除所有找到的x{ assert(pSeq); size_t start=0; size_t sign=0; int count=0; int i; for (i = 0; i < (int)pSeq->_size; i++) { if (pSeq->_Array[i] != x) { pSeq->_Array[start] = pSeq->_Array[sign]; sign++; start++; } else { count++; sign++; } } pSeq->_size -= count;}void Modify(Seqlist *pSeq, size_t num, datatype x) //修改某一个位置上的数据{ assert(pSeq); pSeq->_Array[num-1] = x;}#endif
主函数;
#include"test.h"int main(){ Seqlist pSeq; init(&pSeq); //初始化 pushback(&pSeq, 1);//尾部添加1 pushback(&pSeq, 2);//尾部添加2 pushback(&pSeq, 3);//尾部添加3 pushback(&pSeq, 3);//尾部添加3 pushback(&pSeq, 4);//尾部添加4 pushfront(&pSeq, 0);//头部添加0 Modify(&pSeq, 3,2); //修改第三个数据为2 removesign(&pSeq, 3);//删除第一个找到的数据3 removeallsign(&pSeq, 2);//删除所有2 popback(&pSeq); //尾删除 popfront(&pSeq); //头删除 PrintfSqelist(&pSeq);//打印 return 0;}
左图为结果。
本文出自 “痕迹” 博客,请务必保留此出处http://wpfbcr.blog.51cto.com/10696766/1712276
0 0
- 简单的动态线性表
- 线性表的简单总结
- 线性表的简单实现
- 线性表的简单实现
- 线性表的简单实现
- 线性表的顺序动态存储——C语言实现简单函数
- 数据结构之线性表的线性分配动态存储
- 动态顺序 线性表 的实现源码
- 线性表的动态顺序存储实现
- 线性表的动态顺序存储实现
- 线性表的动态链式构建
- 动态线性表
- 简单的线性表-顺序表
- 线性表-顺序表的简单知识
- 线性表-链表的简单操作
- 自定义线性表的简单例子
- 线性顺序表的简单操作
- 最简单的数据结构----线性表
- 编写程序将"hello-NOworld"变成"hello-world"
- 判断一个数或者一串字符串是不是回文数
- 指针数组与数组指针 和 函数指针与函数指针数组
- 调整数组使奇数全部都位于偶数前面
- 全局内存BSS,DATA,RODATA的区别以及其他内存区间相关
- 简单的动态线性表
- 简单的单链表<实现单链表的增删查改逆序和寻找中间节点>
- 简单模拟STL库中string的实现
- 数据结构----稀疏矩阵的快速转置
- 数据结构---哈希表(KV模式)(除留余数法)
- 数据结构-- 广义表
- 数据结构--二叉树(1)
- 发布与订阅
- C语言下的FILE指针与Linux的文件描述符