顺序表
通常用数组来描述数据结构中顺序存储结构(顺序表是基于数组实现的)。
疑惑1:
数据结构书本上的伪代码
顺序表的存储结构:
#idefine MAXSIZE 100
typedef struct
{
ElemType *elem;
int length;
}SqList;
顺序表的初始化:
Status InitList(SqList &L)
{//构造一个空的顺序表L
L.elem=new ElemType[MAXSIZE];
if(!L.elem) exit(OVERFLOW)
L.length =0;
return 0;
}
如何在编译器实现这些伪代码?它需不需要int main()?以及在什么位置? 如何创建的类似1 2 3 4 5 这样的顺序表?怎么输入输出像图书管理信息到顺序表?
#include<iostream>
using namespace std;
#define MAXSIZE 100
typedef struct
{
int data[MAXSIZE];
int length;
}SqList;
int IniList(SqList &L)
{
L.length = 0;
return 0;
}
void ListInsert(SqList &L,int i,int e)
{
for(int j=L.length;j>=i;j--)
L.data[j]=L.data[j-1];
L.data[i-1]= e ;
L.length++ ;
}
int main()
{
SqList L; //声明一个顺序表
IniList(L); //初始化一个顺序表
ListInsert(L,1,1); //插入元素
ListInsert(L,2,2);
ListInsert(L,3,3);
ListInsert(L,4,4);
cout<<"元素总数" <<L.length<<endl ;
cout<<"第3个元素为 "<<L.data[2]<<endl;
return 0;
}
/*上面的代码是用插入元素的函数从data[0]也就是第一个元素开始插入,形成一个有4个元素的顺序表。*/
运行结果:
未解决疑问:像图书信息在结构体中有书名、价钱、编号等信息,一个图书结构体是一个顺序表的元素,那在创建这个图书信息的顺序表时,该怎么把图书的这些信息输入到顺序表中?
单链表(结点方式)
输出链表长度
<1>
#include<iostream>
using namespace std;
//typedef int DataType;
#define Status int
#define ElemType int
typedef struct LNode
{
ElemType data; //当前节点中所保存的元素
struct LNode* next; //指向链表中下一个结点
}*LinkList, LNode;
Status InitList(LinkList &L)
{
L= new LNode ;
L ->next = NULL;
return 1;
}
int ListLength(LinkList L)
{
LinkList p=L;
int sum =0;
while (p)
{
sum++;
p = p-> next;
}
return sum-1;
}
int main()
{
LinkList L;
InitList(L);
cout << ListLength(L) << endl;
return 0;
}
<2>
#include<iostream>
using namespace std;
typedef struct LNode
{
int data;
struct LNode*next;
}*LinkList,LNode;
int InitList(LinkList &L)
{
L=new LNode ;
L->next = NULL;
return 1;
}
int ListLength( LinkList L)
{
LinkList p=L;
int sum=0;
while(p)
{
sum++;
p = p->next;
}
return sum-1;
}
int main()
{
LinkList L;
InitList(L);
cout << ListLength(L) <<endl;
return 0;
}
/*<1>和<2> 同样的效果,区别在于在代码中定义函数是<1>是用define定义 Status 、 ElemType的类型为 int
<2>中直接在函数前生命返回值类型为int 如 int ListLength(LinkList L)
*/
单链表的插入,下次补充。