//1.单链表
typedef struct LNode{
Elemtype data;
struct LNode *next;
}LNode,*LinkList;
//2.头插法建立单链表
LinkList List_HeadInsert(LinkList &L){
LNode *s;//插入结点
int x;//待输入结点值
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
scanf("%d",&x);
while(x!=9999){
s=(LNode*)malloc(sizeof(LNode));
s->data=x;
s->next=L->next;
L->next=s;
scanf("%d",&x);
}
return L;
}
//3.尾插法建立链表
LinkList List_TailInsert(LinkList &L){
LNode *s;
int x;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
LNode *r=L;//r为表尾指针
scanf("%d".&x);
while(x!=9999){
s=(LNode*)malloc(sizeof(LNode));
s->data=x;
r->next=s;
r=s;
scanf("%d",&x);
}
r->next=NULL;//注意尾插法要置尾结点为空
return L;
}
//4.按序号查找结点值
LNode *GetElem(LinkList L,int i){
int j=1;
LNode *p=L->next;
if(i==0)
return L;
if(i<1)
return NULL;
while(p&&j<i){
p=p->next;
j++;
}
return p;
}
//5.按值查找结点
LNode *LocateElem(LinkList L,ElemType e){
LNode *p=L->next;
while(p&&p->data!=e)
p=p->next;
return p;
}
//6.双链表
typedef struct DNode{
ElemType data;
struct DNode *prior,*next;
}DNode,*DLinkList;
//7.静态链表
#define MaxSize 50
typedef struct{
ElemType data;
int next;
} SLinkList[MaxSize];
//8.顺序表
//(1)静态分配
#define MaxSize 50
typedef struct{
ElemType data[MaxSize];
int length;
}SqList;
//(2)动态分配
#define InitSize 100 //设置初始长度
typedef struct{
ElemType *data;
int MaxSize,length;
}SeqList;
//c的初始动态分配语句
L.data = (ElemType*)malloc(sizeof(ElemType)*InitSize);
//c++的初始动态分配语句
L.data = new ElemType[InitSize];
//9.顺序表的插入
bool ListInsert(SqList &L,int i,ElemType e){
if(i<1||i>L.length+1)
return false;
if(L.length>=MaxSize)
return false;
for(int j=L.length;j>=i;j--)
L.data[j]=L.data[j-1];
L.data[i-1]=e;
L.length++;
return true;
}
//10.删除操作
bool ListDelete(SqList &L,int i,ElemType &e){
if(i<1||i>L.length)
return false;
e=L.data[i-1];
for(int j=i;j<L.length;j++)
L.data[j-1]=L.data[j];
L.length--;
retrun true;
}
//11.按值查找
int LocateElem(SqList L,ElemType e){
int i;
for(i=0;i<L.length;i++){
if(L.data[i]==e) return i+1;
}
return 0;
}
数据结构复习笔记(线性表)
于 2022-11-28 18:37:01 首次发布