线性表实现代码
来源:互联网 发布:广州网络维护it326 编辑:程序博客网 时间:2024/06/06 18:17
#include<stdio.h>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
//Status 是函数反回类型,其值是函数结果状态代码//
typedef int Status;
//ElemType根根实际需要的类型定义,暂设为int
typedef int ElemType;
#define LIST_INIT_SIZE 100 //线性表存储空间的初始分配量
#define LISTINCREMENT 10 //线性表存储空间的分配增量
typedef struct {
ElemType *elem;
int length;
int listsize;
}SqList;
Status InitList_Sq(SqList &L) {
//构造一个空的顺序线性表L
L.elem = (ElemType *) malloc( LIST_INIT_SIZE * sizeof(ElemType));
if ( !L.elem) exit (OVERFLOW ); //存储空间分配失败
L.length= 0; //空表长度为0
L.listsize = LIST_INIT_SIZE; //初始存储容量
return OK;
}//InitList_Sq
int LocateElem_Sq(SqList L,int e, Status (*compare)(ElemType,ElemType)) {
//在顺序线性表L中查找第1个值与e满足compare()的元素的位序
//若找到,则返回其在L中的位序,否则返回0
int i =1; //i初使值为第一个元素的位序
ElemType *p = L.elem; //p初使值为第一个元素的存储位置
while (i <=L.length && !(*compare)(*p++,e))
++i;
if ( i<= L.length)
printf("所匹配的元素位置在:%d ",i);
printf("\n");
return 0;
}
int compare(ElemType a,ElemType b) {
if (a==b)
return TRUE;
else
return FALSE;
}
Status ListPrint_Sq(SqList &L,int n) {
//输入一个顺序表
int i;
//ElemType *p;
L.length=n;
if (!L.elem)
{
printf( "List is not exit! ");
return ERROR;
}
printf("please input the element:\n");
for(i=0;i<n;i++)
{
scanf("%d",&L.elem[i]);
}
printf("please output the element:\n");
for(i=0;i<n;i++)
{
printf("%d ",L.elem[i]);
}
printf("\n");
return 0;
}
Status ListInsert_Sq(SqList &L, int i,ElemType e) {
//在顺序线性表L中第i个位置之前插入新的元素e, 1 <=i <=ListLength_Sq(L) +1
int j;
int *p,*q;
if (i <1 || i >L.length+1) //判断有关参数的合理性:i值不合法
return ERROR;
if ( L.length >= L.listsize )
{ //存储空间不够需要分配
L.elem = (ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT) *sizeof(ElemType));
if (!L.elem) exit(OVERFLOW); //空间分配失败
L.listsize +=LISTINCREMENT;
}
q = &L.elem[i-1];//q为插入位置
for (p = & (L.elem[L.length-1]); p>=q; --p)
{
*(p+1) = *p;
}//插入位置及以后的元素右移
*q = e; //插入e
++L.length; //表长增1
printf("output after insert\n");
for(j=0;j<L.length;j++)
{
printf("%d ",L.elem[j]);
}
printf("\n");
return OK;
}
int main(void)
{
SqList L;
int result;
InitList_Sq(L); //构造一个空顺序表;
ListPrint_Sq(L,10); //输入顺序表元素;
ListInsert_Sq(L, 5, 0) ;//在第i个元素前插入元素
LocateElem_Sq(L, 5, compare); //查找匹配元素
return 0;
}
- 线性表实现代码
- java数据结构之线性表代码实现
- 代码,用c++实现线性链表
- 【SeqList】线性表代码实现总结
- 数据结构 线性表以及Java代码实现
- 数据结构中的线性表代码实现
- 线性表(思想+伪代码+部分代码实现)
- 线性回归的代码实现
- 线性神经网络及其代码实现
- 线性结构--->线性表实现
- 线性表之顺序表 图解和代码实现
- 线性表之顺序表 图解和代码实现
- 数据结构学习-线性表-顺序表的代码实现
- 数据结构学习-线性表-链表的代码实现
- 用线性表实现的通讯录管理 C++代码
- 严蔚敏--线性表的顺序表示和实现 代码
- 严蔚敏--线性表的链式表示和实现 代码
- 线性表之单链表 图解和代码实现
- linux 多进程知识
- Linux/ubuntu 查看JDK版本是32位还是64位
- the first article
- erlang的递归与尾递归
- ACM专题训练
- 线性表实现代码
- sscanf 和 regex
- 史上最糟糕简历:长度超过一页 使用过多术语
- java中RandomAccessFile类的讲解
- MFC中使用CTabCtrl或CPropertySheet实现标签页
- Qt入门-控制台应用程序Hello World
- u-boot 学习之源代码目录结构
- 程序员的调式感悟
- Unix系统信号