广义表
一,实际上是对线性表的推广;
二,对于线性表而言,n个元素都是基本的单元素;
三,广义表中,这些元素不仅可以是单元素还可以是另一个广义表;
struct node{
int sign //作为标记,若sign为0,则表示节点为单元素,若为1,则表示广义表
union{
elementtype data; //sign为0时
struct node *pnext; //sign为1时
}Node;
struct node *next;
};
多重链表:链表中的节点可能同时隶属于多个链
一般如树,图这样相对复杂的数据结构都可以采用多重链表的方式实现存储
[例]矩阵的实现
矩阵一般有三个元素:行坐标,列坐标,数值;
利用多重链表包含行和列指针来实现
堆栈:具有一定约束的线性表,只能从一端存取数据
对堆栈存入数据叫做入栈,删除数据叫出栈,且堆栈遵循着先入后出,后入先出的原则。(在这里可以将堆栈类比成一个杯子,先存入的数据在杯子底层,后存入的在杯子上层)
堆栈的实现:
(1)建立堆栈
#define max_size //堆栈存储元素的最大个数
typedef stact stack{
elementtype data[max_size]; //利用数组的顺序存储的特点来实现堆栈后入先出的特点
int top //用于记录栈顶所在位置,即对应最后元素的数组下标
}STACK;
(2)入栈push
void push(STACK *p,elementtype x)
{
if(p->top==max_size-1) //由于是利用数组实现的,则第一个元素下标从0开始,最后一个
元素最大为max_size-1
printf("栈满");
else
{
p->data[++(p->top)]=x; //先进行自增运算,再进行赋值运算
}
}
(3)出栈pop
elementtype pop(STACT *p)
{
if(p->top==-1)
{
printf("栈空");
return ERROR;
}
else
{
return p->data[p->top--]; //先进行输出,在进行自减运算
}
}