C语言数据结构实战(一)顺序表的插入与删除

C语言数据结构实战(一)顺序表的插入与删除 博客分类:  C语言
 

今天学习了思成老师的数据结构实战教程 写了一个顺序表 插入和删除的操作 把源码共享给大家 一共包括list.c stu.h main.c list.h   .h文件是头文件 需要引入 具体的功能我都已经在代码中写明了 

list.h代码如下:

C代码   收藏代码
  1. //线性表的定义在头文件中实现  
  2. #ifndef _LIST_H  
  3. #define _LIST_H  
  4.   
  5. #define _LIST_INIT_SIZE 10  
  6. #define _LIST_INCREME   10  
  7.   
  8. typedef struct  
  9. {  
  10.   ElemType * elem;//首地址  
  11.   int        length;  
  12.   int         size;  
  13. }LIST;  
  14.   
  15. LIST *InitList();  
  16. void FreeList(LIST *l);  
  17. int InsertList(LIST *l,int i,ElemType *e);  
  18. int DeleteList(LIST *l,int i);  
  19. #endif  

 list.c代码如下

C代码   收藏代码
  1. #include   
  2. #include   
  3. #include "stu.h"  
  4. #include "list.h"  
  5. //线性表的初始化,此时数据存储的大小的内存还未开辟 开辟的是list.h的大小  
  6. LIST *InitList()  
  7. {  
  8.   LIST *l=(LIST *)malloc(sizeof(LIST));  
  9.   //判断开辟是否成功  
  10.   if(l==NULL)  
  11.     exit(0);  
  12.   //开辟存储数据的内存的区域  
  13.     l->elem=(ElemType *)malloc(_LIST_INIT_SIZE *sizeof(ElemType));  
  14.     //如果开辟成功的话就释放掉内存  
  15.     if(l->elem==NULL)  
  16.     {  
  17.       free(l);  
  18.       exit(0);  
  19.     }  
  20.     //有效长度赋初值为0  
  21.     l->length=0;  
  22.     l->size=_LIST_INIT_SIZE;  
  23.     return l;  
  24. }  
  25. //释放对区内存的函数  
  26. void FreeList(LIST *l)  
  27. {  
  28.   //要先释放成员的空间  
  29.   free(l->elem);  
  30.   free(l);  
  31. }  
  32. //第一个参数要传得是插入哪一个线性表中去 i指位置   
  33. int InsertList(LIST *l,int i,ElemType *e)  
  34. {  
  35.   //定义一些指针 指向相应的位置  
  36.   ElemType *p=NULL,*q=NULL,*newElem=NULL;  
  37.   if(l==NULL || e==NULL)  
  38.   return 0;  
  39.     //i指的是第几个位置 不是下标  
  40.   if(i<1 i="">l->length+1)  
  41.   return 0;  
  42.   //if有效长度大于最大的长度的时候 重新开辟一块内存  
  43.   if(l->length>=l->size)  
  44.   {  
  45.       
  46.     newElem=realloc(l->elem,(l->size+_LIST_INCREME)*sizeof(ElemType));  
  47.     if(newElem==NULL)  
  48.     return 0;  
  49.     l->elem=newElem;  
  50.     l->size+=_LIST_INCREME;  
  51.       
  52.   }  
  53.     //q指向插入的位置 i-1代表下标  
  54.   q=&l->elem[i-1];  
  55.     //指向最后一个有效的数据元素  
  56.   for(p=&(l->elem[l->length-1]);p>=q;p--)  
  57.      *(p+1)=*p;  
  58.      *q=*e;  
  59.      ++l->length;  
  60.      return 1;  
  61. }  
  62.   
  63. int DeleteList(LIST *l,int i)  
  64. {   
  65.   ElemType *p=NULL,*q=NULL;  
  66.   if(l=NULL)  
  67.   return 0;  
  68.   if(i<1 nbsp="" i="">l->length)  
  69.   return 0;  
  70.   p=&l->elem[i-1];  
  71.   q=&l->elem[l->length-1];  
  72.   for(;p
  73.     *p=*(p+1);  
  74.     --l->length;  
  75.     return 1;  
  76. }  

 stu.h代码如下

Java代码   收藏代码
  1. #ifndef _STU_H  
  2. #define _STU_H  
  3. //定义一个学生的结构体  
  4. typedef struct  
  5. {  
  6.   char sno[4];  
  7.   char name[21];  
  8.   char  ***[3];  
  9.   int score;  
  10. }ElemType;  
  11.   
  12. #endif  

 main.c代码如下

C代码   收藏代码
  1. #include   
  2. #include "stu.h"  
  3. #include "list.h"  
  4.   
  5. ElemType stu[3]={  
  6.    {"S101","张三","男",80},  
  7.    {"S102","小红","女",75},  
  8.    {"S103","王五","男",90},  
  9.   
  10. };  
  11. void main()  
  12. {  
  13.   int i;   
  14.     
  15.   LIST *list=NULL;  
  16.   //通过函数初始化空间  
  17.   list=InitList();  
  18.   for(i=0;i<3;i++)  
  19.     InsertList(list,1,&stu[i]);  
  20.     DeleteList(list,2);  
  21.   FreeList(list);  
  22. }  
阅读(1664) | 评论(0) | 转发(0) |
0

上一篇:rhel6.1 取消开机rhn注册提示信息

下一篇:oracle asm磁盘标签丢失导致整个集群和数据库启动失败

评论热议

你可能感兴趣的:(C/C++)