1. 顺序表
1.插入 结构体为 SqList
bool Insert(SqList * &L ,int i ,ElemType e){ //SqList * &L 表示l可以直接操纵结构体的元素.
if(i <0 || i>L->length){
return false;
}
for(int n=L->length;n>i;n--){
L->data[n]=L->data[n-1];
}
L->data[n]=e;
L->length++;
return true;
}
2.删除数据元素
ElemType Delete(SqList * &L ,int i){
if(i > L->length|| i<0 ){
return null;
}
ElemType e =L->data[i];
if(int n =i; n<L->length-1;n++){
L->data[n}=L->data[n+1];
}
L->length--;
return e;
}
2. 链表
1.单链表结构
typedef struct LNode{
ElemType data;
struct LNode * next;
} LinkList
2.双链表结构
typedef struct LNode{
ElemType data;
struct LNode * next;
struct LNode * prior;
} DLinkList
3 .1单链表头插建表法,将新节点插入表头
void createListHead(LinkList *& L ,ElemType[] a, int n){
LinkList *s;
int i;
L=(LinkList *)malloc(sizeof(LinkList ));
for(i =0;i<n;a++){
s=(LinkList *)malloc(sizeof(LinkList));
s->data=a[i];
s->ntext=L->next;
L->next=s;
}
}
3.2 单链表尾插法,将新节点插入表尾
void createListTail(LinkList *&L,ElemType[] a ,int n){
int i;
LinkList * s ,*r;
L=(LinkList *)malloc(sizeof(LinkList ));
r=L;
for(i=0;i<n;i++){
s=(LinkList *)malloc(sizeof(LinkList ));
s->data=a[i];
r->next=s;
r=s;
}
r->next=NULL;
}
4.插入元素操作,把s插入到P后边
s=(LinkList *)malloc(sizeof(LinkList));
s->data=5;
s->next=p->next;
p->next=s;
5.删除p元素后边的元素
LinkList * q =p->next;
if(q == null) return null;
e=q->data;
p->next =q-next;
free(q);
return e;
- 双链表创建,头插法(新元素插入到头结点后第一个节点位置)
void createListHead( DLinkList *&L,ElemType[] a,int n){
L=(DLinkList *)malloc(sizeof(DLinkList));
DLinkList *s;
int i;
L->prior=NULL;
for(i =0;i <n;i++){
s=(DLinkList *)malloc(sizeof(DLinkList));
s->data=a[i];
s->next=L->next;
if(L->next != NULL){
s=L->next->prior;
}
L->next=s;
s->prior=L;
}
}
7.双链表创建,尾插法新元素插入成为尾节点)
void createListTail(DLinkList *& L,ElemType[] a,int n){
L=(DLinkList *)malloc(sizeof(DLinkList));
int i ;
DLinkList * s;
DLinkList * r=L;
for(i =0;i<n;i++){
s=(DLinkList *)malloc(sizeof(DLinkList));
s->data=a[i];
r->next=s;
s->prior=r;
r=s;
}
r->next= NULL;
}