线性表

/*
线性表是有相同数据类型的n个数据元素的优先序列,
三个特征:(1)所有的数据的类型相同
 (2)由有限个数据元素构成
 (3)数据元素与位置相关
*/


//静态分配
#include<iostream>


using namespace std;








#define MaxSize 50
typedef int ElemType;
typedef struct{
ElemType data[MaxSize];
int length;
}SqList;






//动态分配
//#define InitSize 100
//typedef int ElemType;
//typedef struct{
// ElemType *data;
// int MaxSize, length;
//}seqList;
//seqList L;
//
//int main(){
//
// L.data = new ElemType[InitSize];
//
//}




///////////////////////////////////////////////////////////////////////////////顺序表的一些操作




//插入元素
bool ListInsert(SqList &L, int i, ElemType e){
if (i<0 || 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++;
}


//删除元素
bool ListDelete(SqList &L, int i, ElemType e){
if (i<0 || 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--;
return true;
}


//顺序查找元素
int LocateElem(SqList &L,ElemType e){
for (int j = 0; j < L.length; j++){
if (L.data[j] == e)
{
return j+1;
}
return false;
}
}


////////////////////////////////////////////////////////单链表的一些操作
//单链表的节点的描述
typedef struct LNode{//定义单链表节点类型
ElemType data;
struct LNode *next;
}LNode,*LinkList;






//实现头插法建立单链表
LinkList CreatList1(LinkList &L){


LNode *s;
int x;
L = new LNode;      //linkList 和 LNode 什么关系…………………………
L->next = NULL;
cin >> x;
while (x != 9999){
s = new LNode;
s->data = x;
s->next = L->next;
L->next = s;
cin >> x;

}
return L;
}




//得到序号为i的元素
LNode *GetElem(LinkList L,int i){
int j = 1;
LNode *p = L->next;//////////////////////linkList和LNode的关系                 头结点之间赋给p
if (i == 0)
return false;
if (i < 1)
return false;
while (p&&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;
}




//插入节点操作,把s查到p后面,后插值


LNode p;
p = GetElem(L,i-1);
s->next = p->next;
p->next = s;


////////////////////////////////////////////////插入节点操作,这次是前插,前插值,方法:先实现后插然后,将data进行交换
LNode p;
p2 = GetElem(L,i-1);
s2->next = p2->next;
p2->next = s2;
ElemType tmp = p2->data;
p2->data = s2->data;
s2->data = tmp;




//////////////删除*p节点
p = GetElem(L,i-1);
q = p->next;
q = GetElem(L,i);
p->next = q->next;
free(q);








//双链表
/////////////////////////////////////////////////////节点类型的描述
typedef struct DNode{                             //定义双链表节点类型
ElemType data;                                //数据域
struct DNode *prior, *next;                   //前驱和后继指针
}DNode,*DLinklist;




/////////////////////////////////双链表的插入操作,注意先从s->next开始!!!!!!!!!!!!!!!!!!!!!1
s->next = p->next;
p->next->prior = s;
s->prior = p;
p->next = s;




//双链表的删除操作
p->next = q->next;
q->next->prior = p;
free(q);















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值