顺序表(C实现)

原创 2015年11月19日 12:49:16
#ifndef _STU_H        //stu.h
#define _STU_H

typedef struct
{
	char sno[5];
	char name[21];
	char sex[3];
	int score;
}Elemtype;

#endif
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 "stu.h"
#include "list.h"
#include <stdio.h>
#include <stdlib.h>
LIST * InitList()
{
	LIST *l=(LIST *)malloc(sizeof(LIST));//not allocate for elements
	if(l==NULL)
		exit(0);
	l->elem=(Elemtype *)malloc(LIST_INIT_SIZE*sizeof(Elemtype));
	if(l->elem==NULL)
	{
		free(l);
		exit(0);
	}
	l->length=0;
	l->size=LIST_INIT_SIZE;
	return l;
}

void FreeList(LIST *l)
{
	free(l->elem);//先释放成员
	free(l);
}
//不管是插入还是删除都要搬家。
int InsertList(LIST *l,int i,Elemtype *e)//i代表第几个位置,不是下标
{
	Elemtype *p=NULL,*q=NULL,*newElem=NULL;
	if(l==NULL || e==NULL)//函数入口参数的检验
		return 0;//error
	if(i<1 || i>l->length+1)
		return 0;
    if(l->length>=l->size)//空间已满
	{
        newElem=(Elemtype *)realloc(l->elem,(l->size+LIST_INCREME)*sizeof(Elemtype));
		if(newElem==NULL)
			return 0;
		l->elem=newElem;
		l->size += LIST_INCREME;
	}

	q=&l->elem[i-1];//要插入的位置,
	for(p=&l->elem[l->length-1];p>=q;p--)//搬家
	{
		*(p+1)=*(p);
	}
	*q=*e;
	++l->length;
	return 1;//ok

    
}

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;
}
main.c

#include "stu.h"
#include "list.h"
#include <stdio.h>
#include <stdlib.h>
LIST * InitList()
{
	LIST *l=(LIST *)malloc(sizeof(LIST));//not allocate for elements
	if(l==NULL)
		exit(0);
	l->elem=(Elemtype *)malloc(LIST_INIT_SIZE*sizeof(Elemtype));
	if(l->elem==NULL)
	{
		free(l);
		exit(0);
	}
	l->length=0;
	l->size=LIST_INIT_SIZE;
	return l;
}

void FreeList(LIST *l)
{
	free(l->elem);//先释放成员
	free(l);
}
//不管是插入还是删除都要搬家。
int InsertList(LIST *l,int i,Elemtype *e)//i代表第几个位置,不是下标
{
	Elemtype *p=NULL,*q=NULL,*newElem=NULL;
	if(l==NULL || e==NULL)//函数入口参数的检验
		return 0;//error
	if(i<1 || i>l->length+1)
		return 0;
    if(l->length>=l->size)//空间已满
	{
        newElem=(Elemtype *)realloc(l->elem,(l->size+LIST_INCREME)*sizeof(Elemtype));
		if(newElem==NULL)
			return 0;
		l->elem=newElem;
		l->size += LIST_INCREME;
	}

	q=&l->elem[i-1];//要插入的位置,
	for(p=&l->elem[l->length-1];p>=q;p--)//搬家
	{
		*(p+1)=*(p);
	}
	*q=*e;
	++l->length;
	return 1;//ok

    
}

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;
}
VC6调试效果图


版权声明:本文为博主原创文章,未经博主允许不得转载。

数据结构的C实现_顺序表

//线性顺序表 #include #include #define LIST_INIT_SIZE 1000 //线性表存储空间的初始分配量 #define LISTINCRESEMENT 100 ...
  • mpbchina
  • mpbchina
  • 2012年03月22日 18:23
  • 13557

顺序表之迷宫问题(C实现)

迷宫图 data.h #ifndef _DATA_H #define _DATA_H typedef struct { int y; int x; }POS; typedef st...

静态顺序表用C实现的各种操作

1.实现顺序表的增删查改 2.并用冒泡法对该顺序表进行排序

数据结构(C实现)------- 顺序表

顺序表的C实现

简单数据结构之顺序表(C实现)

/* ============================================================================ Name : sequ...

线性表之<顺序表sqlist>的储存及插入、删除-C代码实现

mark

线性表之顺序存储结构--C实现

http://blog.csdn.net/lincyang/article/details/8606682 说在前面 数据结构和算法是程序设计的灵魂。坦诚的说,我在这方面是弱的可以。虽然工作这么...
  • wang725
  • wang725
  • 2013年07月13日 10:39
  • 401

线性表之顺序存储结构--C实现

http://blog.csdn.net/lincyang/article/details/8606682 目录(?)[+] 说在前面 数据结构和算法是程序设计的灵魂。坦诚的说,我在这...

线性表之顺序存储结构--C实现

说在前面 数据结构和算法是程序设计的灵魂。坦诚的说,我在这方面是弱的可以。虽然工作这么多年了,因为种种借口,这块知识一直是我的痛处。 曾经在面试时大言不惭的说,这些知识在工作中很少用到,所...

线性结构之顺序表------C实现

从很早以前就知道数据结构很重要,一直想好好学一下。可每次才将线性结构看完,就没劲了!深感惭愧。 首先介绍下数组: 数组有两种:一种是静态数组,一种是动态数组。 静态数组的长度是固定的,通常在编译阶段就...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:顺序表(C实现)
举报原因:
原因补充:

(最多只允许输入30个字)