数据结构(c语言)线性表-顺序表
来源:互联网 发布:网络规划设计师有用吗 编辑:程序博客网 时间:2024/05/17 22:45
/* 课本参考:数据结构(C语言版)-严蔚敏 一、线性表的顺序表示 1)、线性表的顺序表示就是用一组地址连续的存储单元依次存储线性表的数据元素。 2)、对于线性表 a1 ,a2,…ai…,an 如果每个元素占用s个存储单元, 则ai+1的位置为: LOC(ai+1)=LOC(ai)+s LOC(ai+1)=LOC(a1)+(i-1)*s (存储结构示意图P22) 二、线性表的实现 1、动态分配顺序存储结构 #define LIST_INIT_SIZE 100 #define LISTINCREMENT 10 typedef struct { ElemType *elem int length int listsize }SqList 2、基本操作 1)构造一个空表(P23) 2)插入算法(P24) 3)删除算法(P24) 4)算法的复杂性分析(P25) */#include<stdio.h>#include<stdlib.h>typedef int Status;typedef int ElemType;#define OK 1#define ERROR 0//----线性表动态分配顺序存储结构----#define LIST_INIT_SIZE 10 //线性表存储空间初始分配量#define LISTINCRMENT 10 //线性表存储空间分配增量typedef struct { ElemType *elem; //存储空间基值 int length; //当前长度 int listsize; //当前存储容量}SqList;Status InitList_Sq(SqList &L) {//构造一个空的线性表L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));//动态分配内存L.length=0;L.listsize=LIST_INIT_SIZE;return OK;}Status ListInsert_Sq(SqList &L,int i,ElemType e){ ElemType *newbase; ElemType *p,*q;//在顺序线性表L中的第i个位置之前插入新元素e。//i的合法值1<<i<<L.length+1if(i<1||i>L.length+1) return ERROR;if(L.length>=L.listsize) { newbase =(ElemType*)realloc(L.elem,(L.listsize+LISTINCRMENT)*sizeof(ElemType)); if(!newbase) exit(ERROR); L.elem=newbase; L.listsize+=LISTINCRMENT;}q=&(L.elem[i-1]); //q为插入的地方;for(p=&(L.elem[L.length-1]);p>=q;--p) { *(p+1)=*p;}*q=e;++L.length;return OK;}Status ListDelete_Sq(SqList &L,int i,ElemType e) {ElemType *p,*q;//在顺序表中删除第i元素,并e返回其值if((i<1)||(i>L.length)) return ERROR;p=&(L.elem[i-1]);e=*p;q=L.elem+L.length-1;for(++p;p<=q;++p){*(p-1)=*p;}--L.length;return OK;}void Print(SqList &L) { for(int i=0;i<L.length;i++) {printf("%4d",L.elem[i]);} printf(" 线性表长:%d\n",L.length);printf("\n");}void main() { ElemType e; SqList L; InitList_Sq(L); printf("初始化数据:\n"); for(int i=0;i<9;i++) { L.elem[i]=i; L.length++; } Print(L); ListInsert_Sq(L,5,100); ListInsert_Sq(L,9,90); ListInsert_Sq(L,9,88); Print(L); ListDelete_Sq(L,1,e); Print(L);}
/* 课本参考:数据结构(C语言版)-严蔚敏
一、线性表的顺序表示
1)、线性表的顺序表示就是用一组地址连续的存储单元依次存储线性表的数据元素。
2)、对于线性表 a1 ,a2,…ai…,an 如果每个元素占用s个存储单元, 则ai+1的位置为: LOC(ai+1)=LOC(ai)+s
LOC(ai+1)=LOC(a1)+(i-1)*s (存储结构示意图P22)
1、动态分配顺序存储结构
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef struct
{
ElemType *elem
int length
int listsize
}SqList
2、基本操作 1)构造一个空表(P23)
2)插入算法(P24)
3)删除算法(P24)
4)算法的复杂性分析(P25)
*/
#include<stdio.h>
#include<stdlib.h>
typedef int Status;
typedef int ElemType;
#define OK 1
#define ERROR 0
//----线性表动态分配顺序存储结构----
#define LIST_INIT_SIZE 10 //线性表存储空间初始分配量
#define LISTINCRMENT 10 //线性表存储空间分配增量
typedef struct {
ElemType *elem; //存储空间基值
int length; //当前长度
int listsize; //当前存储容量
}SqList;
Status InitList_Sq(SqList &L) {
//构造一个空的线性表
L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));//动态分配内存
L.length=0;
L.listsize=LIST_INIT_SIZE;
return OK;
}
Status ListInsert_Sq(SqList &L,int i,ElemType e){
ElemType *newbase;
ElemType *p,*q;
//在顺序线性表L中的第i个位置之前插入新元素e。
//i的合法值1<<i<<L.length+1
if(i<1||i>L.length+1) return ERROR;
if(L.length>=L.listsize) {
newbase =(ElemType*)realloc(L.elem,(L.listsize+LISTINCRMENT)*sizeof(ElemType));
if(!newbase) exit(ERROR);
L.elem=newbase;
L.listsize+=LISTINCRMENT;
}
q=&(L.elem[i-1]); //q为插入的地方;
for(p=&(L.elem[L.length-1]);p>=q;--p)
{
*(p+1)=*p;
}
*q=e;
++L.length;
return OK;
}
Status ListDelete_Sq(SqList &L,int i,ElemType e) {
ElemType *p,*q;
//在顺序表中删除第i元素,并e返回其值
if((i<1)||(i>L.length)) return ERROR;
p=&(L.elem[i-1]);
e=*p;
q=L.elem+L.length-1;
for(++p;p<=q;++p)
{
*(p-1)=*p;
}
--L.length;
return OK;
}
void Print(SqList &L) {
for(int i=0;i<L.length;i++)
{
printf("%4d",L.elem[i]);
}
printf(" 线性表长:%d\n",L.length);
printf("\n");
}
void main() {
ElemType e;
SqList L;
InitList_Sq(L);
printf("初始化数据:\n");
for(int i=0;i<9;i++)
{
L.elem[i]=i;
L.length++;
}
Print(L);
ListInsert_Sq(L,5,100);
ListInsert_Sq(L,9,90);
ListInsert_Sq(L,9,88);
Print(L);
ListDelete_Sq(L,1,e);
Print(L);
}
阅读全文
0 0
- 数据结构--线性表.顺序表(C语言实现)
- 数据结构 - 线性表之顺序表 (c 语言)
- 数据结构(c语言)线性表-顺序表
- 数据结构(C语言)线性表 顺序存储
- 数据结构---线性顺序表操作(c++)
- 数据结构之---c语言实现线性表的顺序表
- C语言 数据结构 线性表的顺序表示
- 数据结构c语言实现之顺序线性表
- C语言数据结构-1.线性表之顺序存储结构
- 数据结构C语言实现——顺序线性表SqList
- 【数据结构】线性表顺序结构的操作---C/C++语言
- 【数据结构】线性表顺序结构的操作---C/C++语言
- 数据结构笔记:线性表顺序存储结构(C语言)
- c语言数据结构线性表之顺序表功能函数
- C语言 数据结构 线性表 顺序表 线性表的顺序存储结构
- 线性表顺序实现(C语言)
- 老郭带你学数据结构(C语言系列)1-线性表之静态顺序表
- 老郭带你学数据结构(C语言系列)2-线性表之动态顺序表
- C++个人编程标准(字符、指针、字符串)
- 用JS实现系统登录页的登录和验证
- Connection: close(http协议短链接)和Connection: keep-alive(http协议长链接)有什么区别?
- JSP九大内置对象的作用和用法总结
- cf 389D Fox and Minimal path 【构造】
- 数据结构(c语言)线性表-顺序表
- GPIO Product Guide笔记(Xilinx)
- 1006.换个格式输出整数(字符串处理)
- 使用一个数组实现两个栈
- 13 java里的tcp网络编程
- 技术积累 — 加权平均值滤波算法
- ReentrantReadWriteLock
- javascript 对象的理解
- CSS笔记——margin