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

TTdreamloong 2011-12-13

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

list.h代码如下:

//线性表的定义在头文件中实现
#ifndef _LIST_H
#define _LIST_H

#define _LIST_INIT_SIZE 10
#define _LIST_INCREME   10

typedef struct
{
  ElemType * elem;//首地址
  int        length;
  int         size;
}LIST;

LIST *InitList();
void FreeList(LIST *l);
int InsertList(LIST *l,int i,ElemType *e);
int DeleteList(LIST *l,int i);
#endif

 list.c代码如下

#include <stdlib.h>
#include <stdio.h>
#include "stu.h"
#include "list.h"
//线性表的初始化,此时数据存储的大小的内存还未开辟 开辟的是list.h的大小
LIST *InitList()
{
  LIST *l=(LIST *)malloc(sizeof(LIST));
  //判断开辟是否成功
  if(l==NULL)
    exit(0);
  //开辟存储数据的内存的区域
    l->elem=(ElemType *)malloc(_LIST_INIT_SIZE *sizeof(ElemType));
    //如果开辟成功的话就释放掉内存
    if(l->elem==NULL)
    {
	  free(l);
	  exit(0);
	}
	//有效长度赋初值为0
	l->length=0;
	l->size=_LIST_INIT_SIZE;
	return l;
}
//释放对区内存的函数
void FreeList(LIST *l)
{
  //要先释放成员的空间
  free(l->elem);
  free(l);
}
//第一个参数要传得是插入哪一个线性表中去 i指位置 
int InsertList(LIST *l,int i,ElemType *e)
{
  //定义一些指针 指向相应的位置
  ElemType *p=NULL,*q=NULL,*newElem=NULL;
  if(l==NULL || e==NULL)
  return 0;
  	//i指的是第几个位置 不是下标
  if(i<1||i>l->length+1)
  return 0;
  //if有效长度大于最大的长度的时候 重新开辟一块内存
  if(l->length>=l->size)
  {
  	
    newElem=realloc(l->elem,(l->size+_LIST_INCREME)*sizeof(ElemType));
    if(newElem==NULL)
    return 0;
    l->elem=newElem;
    l->size+=_LIST_INCREME;
    
  }
  	//q指向插入的位置 i-1代表下标
  q=&l->elem[i-1];
  	//指向最后一个有效的数据元素
  for(p=&(l->elem[l->length-1]);p>=q;p--)
     *(p+1)=*p;
     *q=*e;
     ++l->length;
     return 1;
}

int DeleteList(LIST *l,int i)
{ 
  ElemType *p=NULL,*q=NULL;
  if(l=NULL)
  return 0;
  if(i<1|| i>l->length)
  return 0;
  p=&l->elem[i-1];
  q=&l->elem[l->length-1];
  for(;p<q;p++)
    *p=*(p+1);
    --l->length;
    return 1;
}

 stu.h代码如下

#ifndef _STU_H
#define _STU_H
//定义一个学生的结构体
typedef struct
{
  char sno[4];
  char name[21];
  char  sex[3];
  int score;
}ElemType;

#endif

 main.c代码如下

#include <stdio.h>
#include "stu.h"
#include "list.h"

ElemType stu[3]={
   {"S101","张三","男",80},
   {"S102","小红","女",75},
   {"S103","王五","男",90},

};
void main()
{
  int i; 
  
  LIST *list=NULL;
  //通过函数初始化空间
  list=InitList();
  for(i=0;i<3;i++)
    InsertList(list,1,&stu[i]);
    DeleteList(list,2);
  FreeList(list);
}
 

相关推荐