代码是基于408王道考研书
#include <stdio.h>
#include <stdlib.h>
#include<stdbool.h>
#define MaxSize 50
typedef struct DNode{//双链表
int data;
struct DNode *prior,*next;
}DNode;
//静态链表
typedef struct{
int data;
int next;
}SLinkList[MaxSize];//这里用到了结构体数组,等价于下面那种写法
/*
struct Node{
int data;
int next;
};
typedef struct Node SLinkList[MaxSize];
*/
bool InitList(DNode *L){//双链表初始化
L=(DNode *)malloc(sizeof(DNode));
if(L==NULL) //内存不足,分配失败
return false;
L->prior=NULL;
L->next=NULL;
return true;
}
void testDNodeList(){
DNode *L;
InitList(L);
}
//双链表的插入
bool InsertList(DNode *p,DNode *s){
if(p==NULL||s==NULL)
return false;
s->next=p->next;
if(p->next!=NULL)
p->next->prior=s;
s->prior=p;
p->next=s;
return true;
}
//双链表的删除,删除后继节点
bool DeleteList(DNode *p){
if(p==NULL)
return false;
DNode *q=p->next;
if(q==NULL)
return false;
if(q->next!=NULL)
q->next->prior=p;
free(q);
return true;
}
//静态链表初始化
void testSLinkList(){
SLinkList a;
}
int main() {
return 0;
}
链表的优点是插入和删除操作不用像顺序表一样移动大量元素,只需要修改指针,但链表也失去了顺序表随机存取的优点;链表可以解决顺序表需要大量连续的存储空间的问题,但是附加的指针域也存在浪费空间的缺点。