c语言实现动态顺序表
2015-11-19 15:59
661 查看
#include<string.h> #include<stdio.h> #include<malloc.h> #include<assert.h> #include<stdlib.h> typedef int DataType; typedef struct Seqlist { DataType* _array; size_t _size; size_t capacity; }Seqlist; void Initlist(Seqlist *s) { assert(s); s->capacity =100; s->_array =(DataType*)malloc(sizeof(DataType)*s->capacity ); s->_size =0; memset(s->_array,0,(sizeof(DataType)*s->capacity)); } void Pushback(Seqlist*s,DataType x) { assert(s); if(s->_size >=s->capacity ) { DataType *tmp=NULL; s->capacity *=2; tmp=(DataType *)malloc(sizeof(DataType)*s->capacity); memcpy(tmp,s->_array ,(sizeof(DataType)*s->_size )); free(s->_array ); s->_array =tmp; } s->_array [s->_size ++]=x; } void Popback(Seqlist*s) { assert(s); if(s->_size ==0) { printf("Seqlist is null\n"); return; } s->_size--; } void Pushfront(Seqlist*s,DataType x) { int i; assert(s); if(s->_size >=s->capacity ) { DataType *tmp=NULL; s->capacity *=2; tmp=(DataType *)malloc(sizeof(DataType)*s->capacity); memcpy(tmp,s->_array ,(sizeof(DataType)*s->_size )); free(s->_array ); s->_array =tmp; } for(i=(int)s->_size ;i>0;i--) { s->_array [i]=s->_array [i-1]; } s->_array [0]=x; s->_size ++; } void Popfront(Seqlist*s) { int i; assert(s); if(s->_size ==0) { printf("Seqlist is null\n"); return; } for(i=0;i<s->_size-1 ;i++) { s->_array [i]=s->_array [i+1]; } s->_size --; } void Insert(Seqlist*s,size_t pos,DataType x) { size_t i; assert(s); if(s->_size >=s->capacity ) { DataType *tmp=NULL; s->capacity *=2; tmp=(DataType *)malloc(sizeof(DataType)*s->capacity); memcpy(tmp,s->_array ,(sizeof(DataType)*s->_size )); free(s->_array ); s->_array =tmp; } for(i=s->_size ;i>pos;i--) { s->_array [i]=s->_array [i-1]; } s->_array [pos]=x; s->_size ++; } void Erase(Seqlist*s,size_t pos) { int i; assert(s); assert(pos<=s->_size); if(s->_size ==0) { printf("Seqlist is null\n"); return; } for(i=pos;i<s->_size-1 ;i++) { s->_array [i]=s->_array [i+1]; } s->_size --; } int find(Seqlist*s,DataType x) { int i; assert(s); for(i=0;i<s->_size ;i++) { if(s->_array [i]==x) { return i; } } printf("没有该值\n"); } void Remove(Seqlist*s,DataType x) { int i; assert(s); if(s->_size ==0) { printf("Seqlist is null\n"); return; } for(i=0;i<s->_size ;i++) { if(s->_array [i]==x) { int begin=i; for(;begin<s->_size-1;begin++) { s->_array[begin]=s->_array[begin+1]; } s->_size --; break; } } if(i==s->_size) { printf("无该值\n"); return; } } void Removeall(Seqlist*s,DataType x) { DataType * first=s->_array ; DataType * second=s->_array ; DataType * end=second+s->_size; int count=0; assert(s); if(s->_size ==0) { printf("Seqlist is null\n"); return; } for(;second<end;second++) { if(*second!=x) { *first=*second; first++; } else { count++; } } s->_size -=count; } void Modify(Seqlist*s,size_t pos,DataType x) { assert(s); assert(pos<=s->_size ); if(s->_size ==0) { printf("Seqlist is null\n"); return; } s->_array [pos]=x; } void Print(Seqlist*s) { int i; assert(s); if(s->_size ==0) { printf("Seqlist is null"); return; } for(i=0;i<s->_size ;i++) { printf("%d ",s->_array [i]); } } void test() { Seqlist s; Initlist(&s); Print(&s); Pushback (&s,1); Pushback (&s,2); Pushback (&s,3); Pushback (&s,2); Pushback (&s,2); Pushback (&s,7); /*Print(&s); Popback(&s); Print(&s);*/ Pushfront (&s,8); /*Print(&s);*/ Popfront (&s); Print(&s); printf("\n"); Remove(&s,2); Print(&s); printf("\n"); Insert(&s,1,2); Print(&s); Removeall(&s,2); Print(&s); Modify(&s,2,2); Print(&s); } int main() { test(); system("pause"); return 0; }
本文出自 “liveyoung” 博客,转载请与作者联系!
相关文章推荐
- C语言笔试面试总结(网上搜集)
- C++实现含有中文字符串逆序
- c++虚函数实现机制及内存模型
- 简单分析C语言中指针数组与数组指针的区别
- C语言中的回调
- c++中switch语句的使用问题
- C语言中下标与指针的转换以及指向指针的指针的例子
- Composite(组合)设计模式
- 标准C++中的string类的用法总结
- C语言函数之可变参数原理:va_start、va_arg及va_end !!!!!!和printascii在kernel启动前的应用
- Gamma原理及快速实现算法(C/C++)(转)
- 学习C++ vector(摘录)
- 学习笔记6-C语言内存管理+构造类型
- VC++新建工程里面各项的含义
- Implicit declaration of function '' is invalid in C99.
- C C++ Intro - Address Substract
- C语言_DATE_ _TIME_ _LINE_ _FILE_的使用
- C++ 虚函数表解析
- 用c语言.模拟实现strcpy,strcat,strcat,memcpy,memmove
- 关于C++中的cin的一点理解