这篇文章的发表意味着我开始准备考研专业课了
但也许只是一个不算开始的开始
因为又要四级考试/衰/
#include<stdlib.h>
#include<stdio.h>
#define ElemType int
//不支持随机存取
//struct LNode{
// ElemType data;
// struct LNode *next;
//};
//typedef struct LNode LNode;
//typedef struct LNode *LinkList;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
//不带头结点
//bool InitList(LinkList &L){
// L=NULL;
// return true;
//}
//带头节点
bool InitList(LinkList &L){
L=(LNode *)malloc(sizeof(LNode));//分配头节点
if(L==NULL){
return false;
}
L->next=NULL;
return true;
}
bool Empty(LinkList L){
if(L->next==NULL){
return true;
}
else{
return false;
}
}
bool InsertNextNode(LNode *p,ElemType e){
if(p==NULL){
return false;
}
LNode *s=(LNode *)malloc(sizeof(LNode));
if(s==NULL){
return false;
}
s->data=e;
s->next=p->next;
p->next=s;
return true;
} //O(1)
//按位插入 (默认带头结点,考试可能都考)
//带头结点
bool ListInsert(LinkList &L,int i,ElemType e){
if(i<1){
return false;
}
LNode *p;
int j=0;
p=L;
while(p!=NULL && j<i-1){
p=p->next;
j++;
}
InsertNextNode(p,e);
// if(p==NULL){
// return false;
// }
// LNode *s=(LNode *)malloc(sizeof(LNode));
// s->data=e;
// s->next=p->next;
// p->next=s;
// return true;
}
//不带头节点
//bool ListInsert(LinkList &L,int i,ElemType e){
// if(i<1){
// return false;
// }
// if(i==1){
// LNode *s=(LNode *)malloc(sizeof(LNode));
// s->data=e;
// s->next=L;
// L=s;
// return true;
// }
// LNode *p;
// int j=1;
// p=L;
// while(p!=NULL&&j<i-1){
// p=p->next;
// }
// if(p==NULL){
// return false;
// }
//
// LNode *s=(LNode *)malloc(sizeof(LNode));
// s->data=e;
// s->next=p->next;
// p->next=s;
// return true;
//}
bool InsertPriorNode(LNode *p,ElemType e){
if(p==NULL){
return false;
}
LNode *s=(LNode *)malloc(sizeof(LNode));
if(s==NULL){
return false;
}
}
bool ListDelete(LinkList &L,int i,ElemType &e){
if(i<1){
return false;
}
LNode *p;
int j=0;
p=L;
while(p!=NULL&&j<i-1){
p=p->next;
j++;
}
if(p==NULL){
return false;
}
if(p->next==NULL){
return false;
}
LNode *q=p->next;
e=q->data;
p->next=q->next;
free(q);
return true;
} //O(1)-O(n)
bool DeleteNode(LNode *p){
if(p==NULL){
return false;
}
LNode *q=p->next;
p->data=p->next->data;
p->next=q->next;
free(q);
return true;
}//当p刚好是最后一个节点时有bug
LNode * GetElem(LinkList L,int i){
if(i<0){
return NULL;
}
LNode *p;
int j=0;
p=L;
while(p!=NULL&&j<i){
p=p->next;
j++;
}
return p;
}//O(n)
//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!=NULL&&j<i){
// p=p->next;
// j++;
// }
// return p;
//}
//按值查找
LNode * LocateElem(LinkList L,ElemType e){
LNode *p=L->next;
while(p!=NULL&&p->data!=e){
p=p->next;
}
return p;
}
int Length(LinkList L){
int len=0;
LNode *p=L;
while(p->next!=NULL){
p=p->next;
len++;
}
return len;
}
int main(){
LinkList L;
InitList(L);//初始化
for(int i=1;i<10;i++)
{
ListInsert(L,i,i);
}//给链表添加元素
LNode *p=L->next;
for(int i=1;i<10;i++){
printf("%d\n",p->data);
p=p->next;
}//看看添加的效果,就是看看添加上了没有
printf("\n\n-----------------------------------\n\n");
int elem;
int i=ListDelete(L,7,elem);
printf("\n+++++++++++++++++++++++++++++++++++++++++\n");
printf("%d",elem);
}
祝我好运!