链表存取元素 顺序存取法
顺序表存取元素 随机存取
#include<iostream>
using namespace std;
typedef struct LNode{
int data;
LNode *next;
}LNode,*linkList;
//初始化
int InitList(linkList &L) {//带头结点的链表
L=new LNode;
L->next=NULL;
return 1;
}
//销毁单链表
int destroyList(linkList &L){
LNode *p;
while(L){
p=L;
L=L->next;
delete p;
}
return 1;
}
//清空单链表
int ClearList(linkList &L){
LNode *p,*q;
p=L->next;
while(p){
q=p->next;
delete p;
p=q;
}
L->next=NULL;
return 1;
}
//链表长
int lengthList(linkList L){
LNode *p;
int length=0;
p=L->next;
while(p){
length++;
p=p->next;
}
return length;
}
//查 第i个位置上的
int GetElem(linkList L,int i,int &e) {
LNode *p=L->next;
int j=1;
while(p&&j<i){
p=p->next;
j++;
}
if(!p||j>i) return 0;
e=p->data;
return 1;
}
//查 返回位置序号
int LocalElem(linkList L,int e){
LNode *p=L->next;
j=1;
while(p&&p->data!=e){
p=p->next;
j++;
}
if(p) return j;
else return 0;
}
//查 元素值为e的
LNode *GetElem(linkList L,int e) {
LNode *p=L->next;
while(p->data!=e&&p){
p=p->next;
}
return p;
}
//插
int InsertELem(linkList &L,int i,int e) {//在第i个位置上插入e
if(i<1) return 0;
LNode *p=L;
int j=0;
while(j<i-1&&p) {
p=p->next;
j++;
}
if(!p||j>i-1) return 0;
LNode *s=new LNode;
s->data=e;
s->next=p->next;
p->next=s;
return 1;
}
//删除
int DeleteElem(linkList &L,int i) {
LNode *p=L,*q;
if(i<1) return 0;
int j=0;
while(p->next&&j<i-1){
p=p->next;
j++;
}
if(!p||j>i-1) return 0;
q=p->next;
p->next=q->next;
delete q;
return 1;
}
//前插法创建 如abcde 先插e
void CreateList_H(linkList &L,int n) {//插入n个
LNode *p;
for(int i=0;i<n;i++) {
p=new LNode;
cin>>p->data;
p->next=L->next;
L->next=p;
}
}
//后插法创建
void CreateList_R(linkList &L,int n) {
LNode *r=L;
while(r->next){
r=r->next;
}
LNode *q;
for(int i=0;i<n;i++){
q=new LNode;
cin>>q->data;
q->next=NULL;
r->next=q;
r=q;
}
}
//遍历
void PrintList(linkList L){
LNode *p=L->next;
while(p){
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}
main(){
linkList L;
InitList(L);
CreateList_H(L,3);
PrintList(L);
CreateList_R(L,3);
PrintList(L);
InsertELem(L,1,8);
PrintList(L);
DeleteElem(L,1);
PrintList(L);
}