线性表的顺序表示与实现
来源:互联网 发布:js防水涂料价格 编辑:程序博客网 时间:2024/05/18 02:51
#include<stdlib.h>
#include<stdio.h>
#include<iostream>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int status;
typedef int ElemType;
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef struct{
ElemType *elem;
int length;
int listsize;
}SqList; //顺序表
status InitList(SqList &L)
{
L.elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!L.elem)
exit(OVERFLOW);
L.length=0;
L.listsize=LIST_INIT_SIZE;
return OK;
}
status DestoryList(SqList &L)
{
free(&L);
return OK;
}
status ClearList(SqList &L)
{
L.length=0;
return OK;
}
status ListEmpty(SqList L)
{
if(L.length==0)
return TRUE;
else
return FALSE;
}
status ListLength(SqList L)
{
return L.length;
}
status GetElem(SqList L, int i, ElemType &e)
{
if(i>0 && i<L.length+1)
{
e=L.elem[i-1];
return OK;
}
else
return FALSE;
}
status compare(ElemType a, ElemType b)
{
if(a==b)
return OK;
else
return FALSE;
}
status LocateElem(SqList L, ElemType e, status(*compare)(ElemType, ElemType))
{
int i=1;
while(i<=L.length && !(*compare)(L.elem[i],e))
i++;
if(i<=L.length)
return i;
else
return FALSE;
}
status PriorElem(SqList L, ElemType cur_e, ElemType &pre_e)
{
int i=1;
while(i <= L.length && !(cur_e==L.elem[i-1]))
i++;
if(i<2||i>L.length)
return ERROR;
pre_e=L.elem[i-2];
return OK;
}
status NextElem(SqList L, ElemType cur_e, ElemType &next_e)
{
int i=1;
while(i <= L.length && !(cur_e==L.elem[i-1]))
i++;
if(i<2||i>L.length)
return ERROR;
next_e=L.elem[i];
return OK;
}
status ListInsert(SqList &L, int i, ElemType e)
{
if(i<1 || i>L.length+1)
return ERROR;
if(L.length>=L.listsize)
{
ElemType* newbase=(ElemType*)realloc(L.elem, (L.listsize+LISTINCREMENT)*sizeof(ElemType));
if(!newbase)
exit(OVERFLOW);
L.elem=newbase;
L.listsize+=LISTINCREMENT;
}
ElemType* q=&(L.elem[i-1]); //q为插入位置
for(ElemType* p=&(L.elem[L.length-1]);p>=q;--p) //插入位置及之后的元素右移
*(p+1)=*p;
*q=e;
++L.length;
return OK;
}
status ListDelete(SqList &L, int i, ElemType &e)
{
if(i<1 || i>L.length+1)
return ERROR;
e=L.elem[i-1];
for(ElemType* p=&(L.elem[i-1]);i<=L.length;++p,++i)
*p = *(p+1);
--L.length;
return OK;
}
void MergeList(SqList La, SqList Lb, SqList &Lc)
ElemType* pb=Lb.elem;
Lc.listsize=Lc.length=La.length+Lb.length;
ElemType* pc=(ElemType*)malloc(sizeof(ElemType)*Lc.listsize);
if(!Lc.elem)
exit(OVERFLOW);
ElemType* pa_last=pa+La.length-1;
ElemType* pb_last=pb+Lb.length-1;
while(pa<=pa_last&&pb<pb_last)
{
if(*pa<=*pb)
*pc++=*pa++;
else
*pc++=*pb++;
}
while(pa<=pa_last)
*pc++=*pa++;
while(pb<=pb_last)
*pc++=*pb++;
}
int main()
{
SqList List;
InitList(List);
for(int i=0;i<10;i++)
ListInsert(List,i,i);
int t;
ListDelete(List,3,t);
printf("%d\t",t);
int a;
NextElem(List, 7, a);
printf("%d\t",a);
return 0;
}
#include<stdio.h>
#include<iostream>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int status;
typedef int ElemType;
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef struct{
ElemType *elem;
int length;
int listsize;
}SqList; //顺序表
status InitList(SqList &L)
{
L.elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!L.elem)
exit(OVERFLOW);
L.length=0;
L.listsize=LIST_INIT_SIZE;
return OK;
}
status DestoryList(SqList &L)
{
free(&L);
return OK;
}
status ClearList(SqList &L)
{
L.length=0;
return OK;
}
status ListEmpty(SqList L)
{
if(L.length==0)
return TRUE;
else
return FALSE;
}
status ListLength(SqList L)
{
return L.length;
}
status GetElem(SqList L, int i, ElemType &e)
{
if(i>0 && i<L.length+1)
{
e=L.elem[i-1];
return OK;
}
else
return FALSE;
}
status compare(ElemType a, ElemType b)
{
if(a==b)
return OK;
else
return FALSE;
}
status LocateElem(SqList L, ElemType e, status(*compare)(ElemType, ElemType))
{
int i=1;
while(i<=L.length && !(*compare)(L.elem[i],e))
i++;
if(i<=L.length)
return i;
else
return FALSE;
}
status PriorElem(SqList L, ElemType cur_e, ElemType &pre_e)
{
int i=1;
while(i <= L.length && !(cur_e==L.elem[i-1]))
i++;
if(i<2||i>L.length)
return ERROR;
pre_e=L.elem[i-2];
return OK;
}
status NextElem(SqList L, ElemType cur_e, ElemType &next_e)
{
int i=1;
while(i <= L.length && !(cur_e==L.elem[i-1]))
i++;
if(i<2||i>L.length)
return ERROR;
next_e=L.elem[i];
return OK;
}
status ListInsert(SqList &L, int i, ElemType e)
{
if(i<1 || i>L.length+1)
return ERROR;
if(L.length>=L.listsize)
{
ElemType* newbase=(ElemType*)realloc(L.elem, (L.listsize+LISTINCREMENT)*sizeof(ElemType));
if(!newbase)
exit(OVERFLOW);
L.elem=newbase;
L.listsize+=LISTINCREMENT;
}
ElemType* q=&(L.elem[i-1]); //q为插入位置
for(ElemType* p=&(L.elem[L.length-1]);p>=q;--p) //插入位置及之后的元素右移
*(p+1)=*p;
*q=e;
++L.length;
return OK;
}
status ListDelete(SqList &L, int i, ElemType &e)
{
if(i<1 || i>L.length+1)
return ERROR;
e=L.elem[i-1];
for(ElemType* p=&(L.elem[i-1]);i<=L.length;++p,++i)
*p = *(p+1);
--L.length;
return OK;
}
void MergeList(SqList La, SqList Lb, SqList &Lc)
{
//已知顺序线性表La和Lb的元素按值非递减排列
//归并La和Lb得到新的顺序线性表Lc,Lc的元素也按值非递减排列
ElemType* pa=La.elem;ElemType* pb=Lb.elem;
Lc.listsize=Lc.length=La.length+Lb.length;
ElemType* pc=(ElemType*)malloc(sizeof(ElemType)*Lc.listsize);
if(!Lc.elem)
exit(OVERFLOW);
ElemType* pa_last=pa+La.length-1;
ElemType* pb_last=pb+Lb.length-1;
while(pa<=pa_last&&pb<pb_last)
{
if(*pa<=*pb)
*pc++=*pa++;
else
*pc++=*pb++;
}
while(pa<=pa_last)
*pc++=*pa++;
while(pb<=pb_last)
*pc++=*pb++;
}
int main()
{
SqList List;
InitList(List);
for(int i=0;i<10;i++)
ListInsert(List,i,i);
int t;
ListDelete(List,3,t);
printf("%d\t",t);
int a;
NextElem(List, 7, a);
printf("%d\t",a);
return 0;
}
0 0
- 线性表的顺序表示与实现
- 线性表的顺序表示与实现
- 线性表的顺序表示与实现
- 线性表的顺序表示与实现
- 线性表的顺序表示与实现--顺序表
- 线性表之顺序表示与实现
- 实验一 线性表的顺序表示与实现
- 重温数据结构-线性表的顺序表示与实现
- 线性表的顺序表示与实现(C++版)
- 数据结构—线性表的顺序表示与实现
- 《数据结构》---线性表的顺序表示与实现
- 线性表的顺序表示和实现
- 线性表的顺序表示和实现
- 线性表的顺序表示和实现
- 线性表的顺序表示和实现
- 线性表的顺序表示和实现
- 线性表的顺序表示和实现
- 线性表的顺序表示和实现
- Java-2048
- LeetCode OJ 123 Best Time to Buy and Sell Stock III
- Php数据库操作
- C++库常用函数一览
- Php上传文件
- 线性表的顺序表示与实现
- T-SQL查询进阶
- Php网站建立
- colorAccent,colorPrimary,colorPrimaryDark
- Apache服务器编译安装与简单配置
- 解决编译apache出现的问题:configure: error: APR not found . Please read the documentation
- 感兴趣的一个小问题
- android 内存泄漏之Context--整理-引用
- eclipse 配置 maven