线性表链式结构实现实例
#include
#include
#include
using namespace std;
#define LIST_INIT_SIZE 10 //线性表存储空间初始分配量
#define LISTINCREMENT 10 //线性表存储空间分配增量
/*状态码*/
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
typedef struct Student
{
char num[10];
char name[10];
int score;
}STU;
typedef struct
{
STU *elem;
int length;
int listsize;
}SqList;
//初始化一个线性表
Status InitList_Sq(SqList &L)
{
L.elem =(STU *)malloc(LIST_INIT_SIZE*sizeof(STU));
if(!L.elem ) exit(OVERFLOW);
L.length =0;
L.listsize =LIST_INIT_SIZE;
return OK;
}
Status DestroyList_Sq(SqList &L)
{
free(L.elem );
L.elem =NULL;
L.length =0;
L.listsize =0;
return OK;
}
Status ClearList_Sq(SqList &L)
{
L.length =0;
return OK;
}
Status ListEmpty_Sq(SqList L)
{
if(L.length ==0)
return TRUE;
else
return FALSE;
}
int ListLength_Sq(SqList L)
{
return L.length ;
}
Status GetElem_Sq(SqList L,int i,STU &e)
{
if(iL.length )
return ERROR;
strcpy(e.name ,L.elem[i-1].name) ;
strcpy(e.num ,L.elem[i-1].num );
e.score =L.elem[i-1].score ;
return OK;
}
int compare(STU c1,STU c2)
{
if(strcmp(c1.name,c2.name)==0 &&strcmp(c1.num ,c2.num)==0 &&c1.score ==c2.score return 1;
else
return 0;
}
int LocateElem_Sq(SqList L,STU e)
{
STU *p;
int i = 1,flag; // i的初值为第1个元素的位序
p = L.elem; // p的初值为第1个元素的存储位置即地址
while(i
{
flag=compare(*p++,e);
if(flag==0)
++i;
else
break; )
}
return i;
}
Status PriorElem_Sq(SqList L,STU cur_e,STU &pre_e)
{
STU *p;
int i = 1; // i的初值为第1个元素的位序
p = L.elem; // p的初值为第1个元素的存储位置即地址
while(i
if(i==1)
return ERROR;
else
{
pre_e=L.elem [i-2];
return OK;
}
}
Status NextElem_Sq(SqList L,STU cur_e,STU &next_e)
{
STU *p;
int i = 1; // i的初值为第1个元素的位序
p = L.elem; // p的初值为第1个元素的存储位置即地址
while(i
if(i==L.length )
return ERROR;
else
{
next_e=L.elem [i];
return OK;
}
}
Status ListInsert(SqList &L,int i,STU e)
{
STU *newbase, *q, *p;
// 输入的i 不合法
if(i L.length + 1)
return ERROR;
// 当前存储空间已满, 增加分配
if( L.length >= L.listsize)
{// realloc改变L.elem 所指内存的大小,原始所指内存中的数据不变。
newbase = (STU *)realloc(L.elem,L.listsize + LISTINCREMENT * sizeof(STU));
if( !newbase )
exit(ERROR);
L.elem = newbase; // 新基址
L.listsize += LISTINCREMENT; // 增加存储容量
}
// 指定插入的位置
q = &(L.elem[i-1]);
// q之后的元素右移一步,以腾出位置
for(p =&(L.elem [ L.length - 1]); p >= q; --p)
*(p+1) = *p;
strcpy(q->name , e.name) ;
strcpy(q->num ,e.num );
q->score =e.score ;// 插入e
++L.length; // 表长增1
return OK;
}
Status ListDelete(SqList &L,int i,STU &e)
{
STU *p,*q;
// i值不合法
if( i L.length)
return ERROR;
p = L.elem + i - 1; // p为被删除元素的位置
e = *p; // 被删除元素的值赋给e
q = L.elem+i-1; // 表尾元素的位置
for(++p; p
*(p-1) = *p;
L.length--; // 表长减1
return OK;
}
Status listTraverse(SqList L)
{
for(int i=0;i
cout
}
int main()
{
SqList L;
STU stu[5],e,pre_e,next_e,cur_e;
InitList_Sq(L);
cout
for(int i=0;i
{
cin>>stu[i].name >>stu[i].num >>stu[i].score ;
ListInsert(L,1,stu[i]);
}
cout
listTraverse(L);
/*GetElem_Sq(L,3,e);
cout
cin>>e.name >>e.num >>e.score ;
cout
cin>>cur_e.name >>cur_e.num >>cur_e.score ;
PriorElem_Sq(L,cur_e,pre_e);
cout>cur_e.name >>cur_e.num >>cur_e.score ;
NextElem_Sq(L,cur_e,next_e);
cout
cout
cin>>e.name >>e.num >>e.score ;
ListInsert(L,2,e);
listTraverse(L);
return 0;
}
相关文章
- 考点1:数据结构与算法
- 第八课 线性表的链式表示与实现
- 二级access公共基础历年真题解析
- 线性表的链式存储结构 1
- 数据结构A教学大纲
- 数据结构中的名词解释
- 数据结构形考简答题
- 数据结构线性表与链表实验论文
- 数据结构选择题集锦
A )所谓算法就是计算方法 B )程序可以作为算法的一种描述方法 C )算法设计只需考虑得到计算结果 D )算法设计可以忽略算法的运算时间 题目解析:算法是一组有穷指令集,是解题方案的准确而完整的描述.通俗地说,算法就是计算机解题的过程, ...
本课主题: 线性表的链式表示与实现 教学目的: 掌握线性链表.单链表.静态链表的概念.表示及实现方法 教学重点: 线性链表之单链表的表示及实现方法. 教学难点: 线性链表的概念. 授课内容: 一.复习顺序表的定义. 二.线性链表的概念: 以 ...
全国计算机等级考试二级公共基础历年真题解析 2010年9月 选择题:(1)下列叙述中正确的是( ) A)线性表的链式存储结构与顺序存储结构所需要的存储空间是相同的 B)线性表的链式存储结构所需要的存储空间一般要多于顺序存储结构 C)线性 ...
线性表的链式存储结构 线性表的链式存储结构示意图 存储结构: #include using namespace std; template struct node{ T ele; node *next; }; 实现线性表的各个函数: tem ...
数据结构A 教学大纲 (Data Structures A) 课程编号: 06311360 学 分: 5.0 学 时: 75 (其中:讲课学时:60 实验学时:0 上机学时:15) 先修课程:离散数学.程序设计基础.面向对象程序设计 适用专 ...
本章主要介绍了如下一些基本概念: 数据结构:数据结构是研究数据元素之间抽象化的相互关系和这种关系在计算机中 的存储表示(即所谓数据的逻辑结构和物理结构),并对这种结构定义相适应的运算,设计出相应的算法,而且确保经过这些运算后所得到的新结 ...
数据结构形考简答题 1.简述数据的逻辑结构和存储结构的区别与联系,它们如何影响算法的设计与实现? 答:若用结点表示某个数据元素,则结点与结点之间的逻辑关系就称为数据的逻辑结构.数据在计算机中的存储表示称为数据的存储结构.可见,数据的逻辑结构 ...
数据结构 上机实验1 班级:计科1303 姓名:辛颖 学号:[1**********]24 一.实验题目:线性表 二.实验目的: 1.熟悉将算法转换为程序代码的过程: 2.了解顺序表的逻辑结构特性,熟悉掌握顺序表存储结构的C 语言描述方法: ...
单项选择 ( B ) 1. 通常所说的主机是指∶ A) CPU B) CPU和内存 C) CPU.内存与外存 ( C )2. 在计算机内部,一切信息的存取.处理和传送的形式是∶ A) ACSII码 B) BCD码 C) 二进制 D) 十六进 ...