线性表之顺序表的结构与实现
来源:互联网 发布:fifo算法和lru算法 编辑:程序博客网 时间:2024/05/14 07:13
顺序表: 是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。线性表采用顺序存储的方式存储就称之为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。
#include "stdafx.h"#include<iostream>using namespace std;#include<malloc.h>#define LIST_INIT_SIZE 100 //初始化大小#define LISTINCREMENT 10 //线性表满时增加的幅度#define OVERFLOW -1 //内存溢出#define OK 1 //正确#define ERROR 0 //失败typedef int Status; //定义Status为int类型,表示返回标志typedef int ElemType;typedef int KeyType;typedef struct{ //定义结构体 ElemType *elem; KeyType *key; int length; //记录当前长度 int listsize; //记录当前总长度}SqList;//初始化Status InitList (SqList &L){ /*定义一个线性表, &L表示形参是一个引用变量 */ int length1; printf("请确定顺序表的长度:"); scanf("%d",&length1); L.elem=(ElemType*)malloc(length1*sizeof(ElemType)); if(!L.elem){ printf("out of space"); exit(OVERFLOW); } L.length=0; L.listsize=length1; return OK;}//插入 Status Listinsert (SqList &L,int i, ElemType e){ /*在i元素的前面插入元素e*/ ElemType *p,*q,*newbase; if(i<1 || i>L.length+1){//位置错误 return ERROR; } if(L.length >= L.listsize )//长度超过或等于总长度,需要开辟空间 { newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType)); if (newbase==NULL){ printf("out of space"); return (OVERFLOW); } L.elem=newbase; L.listsize+=LISTINCREMENT; } //将i-1后面的元素统一往后移动一个位置 p = &(L.elem[i-1]); for (q=&(L.elem[L.length-1]) ;q>=p;q--){ *(q+1)=*q; } //给i-1位置赋值,就是元素e L.elem[i-1]=e; //长度加1 L.length++; return OK;}//删除Status DeleteList(SqList &L,int i){/*删除i个元素*/ //定义两个指针,一个指向要操作(删除)的位置,一个指向顺序表最后一个元素的位置 ElemType *q ,*p; if(i<1||i>L.length){ return ERROR; } //向前移动位置 q = &(L.elem[i-1]); p = L.elem+L.length-1; for (q++; q <= p; q++){ *(q-1) = *q; } //长度减一 L.length--; return OK;}//查找元素的位置int Location(SqList &L,ElemType e){ ElemType *q,*p; q = &L.elem[0]; //找到表中数据的提示位置 for(int i=0;i<L.length;i++,++q){//循环表的实际长度 if(*q == e){ return i+1; } } return -1;}//输出顺序表void print(SqList *l){ ElemType *p; p = l->elem; //找到表中数据的提示位置 for(int i=0;i<l->length;i++){ printf("%4d",*p); p++; }}int main(int argc,char* argv[]){ SqList L,*sl; int i,e,pos=-1; InitList (L); printf("请向表中置入元素:\n"); for(i=0;i<L.listsize;i++){ scanf("%d",&(L.elem[i])); L.length++; } printf("所创建的线性表为:\n"); sl=&L; print(sl); printf("\n"); printf("请输入要查找元素:") ; scanf("%d",&e); pos = Location(L,e); cout<<"查找元素的位置为:"<<pos<<endl; printf("\n"); printf(pos+""); printf("请输入要删除的元素的位置:") ; scanf("%d",&i); DeleteList(L, i) ; printf("删除后的线性表为:\n"); for(i=0;i<L.length;i++){ printf("%4d",L.elem[i]); } printf("\n"); printf("\n"); printf("请输入要插入的位置和元素:") ; scanf("%d%d",&i,&e); Listinsert (L,i,e); printf("插入后的线性表为:\n"); for(i=0;i<L.length;i++){ printf("%4d",L.elem[i]); } printf("\n"); return OK;}
0 0
- 线性表之顺序表的结构与实现
- 线性结构之顺序表------C实现
- 顺序结构线性表的实现
- c++实现线性表的顺序结构
- 数据结构线性表顺序结构的实现
- 线性表的顺序结构实现
- 关于线性表的线性表的实现(顺序结构)
- 线性结构之顺序表
- 线性表之顺序表示与实现
- 线性表(一)之线性表的顺序存储结构
- 线性表的顺序存储结构之顺序表类的实现_Java
- 线性表的顺序存储结构与链式存储结构
- 线性表之顺序存储结构--C实现
- 线性表之顺序存储结构--C实现
- 线性表之顺序存储结构--C实现
- 线性表之顺序存储结构--C实现
- C语言实现线性表之顺序存储结构操作
- 线性表之顺序存储结构--C实现
- c++ 结构体
- c++ 构造函数
- c++ 单继承派生类的构造函数
- c++ 多重继承
- c++ 虚基类应用
- 线性表之顺序表的结构与实现
- 线性表之单链表
- sharepoint 2010 页面添加footer方法 custom footer for sharepoint 2010 master page
- 循环单链表的结构和定义
- 数据结构之循环双链表的结构和实现
- Java 的 FileFilter文件过滤,readline读行操作
- proxool数据库连接池框架
- bat 批处理变量
- 数据结构之栈的定义