线性表的基本操作
2009-09-03 17:36
295 查看
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define ERROR 0
#define OK 1
#define init_size 5
#define increment 1
typedef int elemType;
typedef struct
{
elemType *elem;
int length;
int list_size;
}sqlist;
int init_list(sqlist &L) //初始化线性表
{
L.elem = (elemType*)malloc(init_size*sizeof(elemType));
if(L.elem == 0)
return ERROR;
else
return OK;
}
int insert_list(sqlist &L,int j,elemType e) //线性表的插入
{
elemType *newbase,*p,*q;
// p = L.elem;
newbase = (elemType*)realloc(L.elem, (L.list_size + increment)*sizeof(elemType));
L.list_size += increment;
if(newbase == NULL)
exit(ERROR);
else
L.elem = newbase;
q = &(L.elem[j-1]);
for( p = &(L.elem[L.length-1]);p >= q;p--)
{
*(p+1) = *(p);
}
*q = e;
++L.length;
return OK;
}
int delete_list(sqlist &L,int i,elemType &e) //删除线性表的第i个元素
{ //并把所删除的元素赋给参数e
elemType *p;
if((i < 1)||(i > L.length))
return ERROR;
for(p = &(L.elem[i-1]);p < &(L.elem[L.length]);p++)
{
*p = *(p+1);
}
e = L.elem[i-1];
--L.length;
return OK;
}
int loc_list(sqlist L,elemType e) //从线性表中查找元素e,如果不存在返回0
{
int i;
elemType *p_temp;
p_temp = L.elem;
for(i = 0;i< L.length;i++)
{
if(*L.elem == e)
{
L.elem = p_temp;
//printf("%d",i);
return i;
}
else
L.elem++;
}
return 0;
}
int next_elem(sqlist L,elemType e,elemType &next_e ) //求元素e的后继,如不存在返回0。
{
elemType i,j;
elemType *p_temp;
p_temp = L.elem;
i = loc_list(L,e);
if(i<1||i>L.length)
return ERROR;
for(j = 0;j < L.length-1;j++)
{
if(j == i+1)
{
next_e = *L.elem;
L.elem = p_temp;
return next_e;
}
else
L.elem++;
}
return ERROR;
}
void main()
{
sqlist L;
init_list(L);
L.length = init_size;
int e;
L.list_size = init_size;
for(int i = 0;i < L.list_size;i++ ) //初始化
{
L.elem[i] = 8-i;
}
for(int m = 0;m < L.list_size;m++)
{
printf("%d/n",L.elem[m]);
}
printf("/n");
insert_list(L,2,9); //插入运算
for(int j = 0;j < L.list_size;j++)
{
printf("%d/n",L.elem[j]);
}
printf("/n");
delete_list(L,2,e); //删除运算
for(int t = 0;t < L.length;t++)
{
printf("%d/n",L.elem[t]);
}
// printf("%d/n",e);
int next_e,next;
next = next_elem(L,7,next_e); //求所给元素的后继,如果是最后一个元素则返回0
printf("%d",next);
}
#include<stdlib.h>
#include<malloc.h>
#define ERROR 0
#define OK 1
#define init_size 5
#define increment 1
typedef int elemType;
typedef struct
{
elemType *elem;
int length;
int list_size;
}sqlist;
int init_list(sqlist &L) //初始化线性表
{
L.elem = (elemType*)malloc(init_size*sizeof(elemType));
if(L.elem == 0)
return ERROR;
else
return OK;
}
int insert_list(sqlist &L,int j,elemType e) //线性表的插入
{
elemType *newbase,*p,*q;
// p = L.elem;
newbase = (elemType*)realloc(L.elem, (L.list_size + increment)*sizeof(elemType));
L.list_size += increment;
if(newbase == NULL)
exit(ERROR);
else
L.elem = newbase;
q = &(L.elem[j-1]);
for( p = &(L.elem[L.length-1]);p >= q;p--)
{
*(p+1) = *(p);
}
*q = e;
++L.length;
return OK;
}
int delete_list(sqlist &L,int i,elemType &e) //删除线性表的第i个元素
{ //并把所删除的元素赋给参数e
elemType *p;
if((i < 1)||(i > L.length))
return ERROR;
for(p = &(L.elem[i-1]);p < &(L.elem[L.length]);p++)
{
*p = *(p+1);
}
e = L.elem[i-1];
--L.length;
return OK;
}
int loc_list(sqlist L,elemType e) //从线性表中查找元素e,如果不存在返回0
{
int i;
elemType *p_temp;
p_temp = L.elem;
for(i = 0;i< L.length;i++)
{
if(*L.elem == e)
{
L.elem = p_temp;
//printf("%d",i);
return i;
}
else
L.elem++;
}
return 0;
}
int next_elem(sqlist L,elemType e,elemType &next_e ) //求元素e的后继,如不存在返回0。
{
elemType i,j;
elemType *p_temp;
p_temp = L.elem;
i = loc_list(L,e);
if(i<1||i>L.length)
return ERROR;
for(j = 0;j < L.length-1;j++)
{
if(j == i+1)
{
next_e = *L.elem;
L.elem = p_temp;
return next_e;
}
else
L.elem++;
}
return ERROR;
}
void main()
{
sqlist L;
init_list(L);
L.length = init_size;
int e;
L.list_size = init_size;
for(int i = 0;i < L.list_size;i++ ) //初始化
{
L.elem[i] = 8-i;
}
for(int m = 0;m < L.list_size;m++)
{
printf("%d/n",L.elem[m]);
}
printf("/n");
insert_list(L,2,9); //插入运算
for(int j = 0;j < L.list_size;j++)
{
printf("%d/n",L.elem[j]);
}
printf("/n");
delete_list(L,2,e); //删除运算
for(int t = 0;t < L.length;t++)
{
printf("%d/n",L.elem[t]);
}
// printf("%d/n",e);
int next_e,next;
next = next_elem(L,7,next_e); //求所给元素的后继,如果是最后一个元素则返回0
printf("%d",next);
}
相关文章推荐
- 线性表上的基本操作实现标准版
- 线性表之链式存储,基本操作
- 线性表的链式存储(单链表)的基本操作
- 数据结构中线性顺序表的基本操作(增删改查及合并)
- 线性表的基本操作实现(基于链表)
- 线性表之顺序表基本操作实现
- 顺序结构实现线性表的基本操作
- 实验一线性表的基本操作实现及其应用
- 实验一线性表的基本操作实现及其应用
- 线性表的实现及其基本操作
- C语言数据结构之线性表的基本操作
- 实验一 线性表的基本操作实现
- 顺序线性表的基本操作算法
- 线性表的基本操作:插入、删除、查找等操作在顺序存储结构和链接存储结构上的算法
- 编程实现顺序存储结构和链式存储结构线性表的建立、查找、插入、删除等基本操作
- 数据结构中线性表的一些基本操作
- 【数据结构】双向循环线性表的基本操作--C++/C实现
- 线性表的基本操作
- 数据结构线性数组的基本操作
- 线性表----顺序栈的基本操作