//方法1:
typedef struct Lnode*pointer;
struct LNode
{
ElemType data;//數據域
pointer next;//指針域
};
typedef pointer LinkList;
//方法2:
typedef struct LNode
{
ElemType data;//數據域
structLNode *next;//指針域
}LNode*LinkList;//LNode(結構體了類型),LinkList(結構體指針類型)都是類型名
2.單鏈的查詢操作
- 按序號進行查找
//按序號查找(單鏈表)
Status GetElem_Lk(LinkList L,int i,ElemType &e)
//在帶頭結點的單鏈表L中查找第i個元素
{
p = L->next;j = 1;
while(p != NULL && j<i)
{
p = p->next;
j++;
}
if(p == NULL || j>i)
return ERROR;
e = p->data;
return OK;
}
- 按元素值進行查找
LNode *LocateElem_Lk(LinkList L,ElemType x)
//在帶頭結點的單鏈表L中查找值爲x的元素
{
p = L->next;
while(p != NULL && p->data != x)
p = p->next;
return p;
}
3.單鏈表的插入操作
Status Insert_L(LinkList &L,int i,ElemType x)
{
P = L;j = 0;
while(p != NULL && j<i-1)
{
p = p->next;
j++;
}
if(p == NULL || j>i-1)
return ERROR;
s = new LNode;//申請結點空間
s->data = x;
s->next = p->next;
p->next = s;
return OK;
}
4.單鏈表的刪除
Status Delete_L(LinkList &L,int i,ElemType &x)
{
p = L;j = 0;
while(p->next != NULL && j<i-1)
{
p = p->next;
j++;
}
if(p->next == NULL || j>i-1)
return ERROR;
s = p->next;//s指向被刪除結點
p->next = s->next;//修改被刪除結點前驅指針域的值
x = s->data;//將被刪除結點的值保存到變量x中
delete s;//釋放被刪除結點的空間
return OK;
}
5.創建單鏈表
//前插法創建單鏈表
void Create_L_F(LinkList &L,int n)
//逆序輸入n個元素的值,建立帶頭結點的單鏈表L
{
L = new LNode;//申請結點空間作爲單鏈表的表頭結點
L->next = NULL;//將表頭結點的指針域置空
for(i = 1;i <= n;i++)
{
cin>>x;//輸入元素x
s->data = x;//將x存入s結點中
s->next = L-next;L->next = s;//將s插入到表頭
}
}
//後插法創建單鏈表
void Create_L_L(LinkList &L,int n)
//順序插入n個元素的值,建立帶頭結點的單鏈表L
{
L = newLNode;//申請結點空間
L->next = NULL;//將表頭結點的指針域置空
r = L;//尾指針r指向頭結點
for(i = 1;i <= n;i++)
{
cin>>x;//輸入元素s
s->data = x;//將x存入s結點中
s->next = NULL;r->next = s;//將s插入到表尾
r = s;//r指向新的尾結點
}
}
6.循環鏈表的定義
//頭尾指針
void join1(CLinkList &L1,CLinkList L2)
{
p = L1;
while(p->next != L1)//n次
p = p->next;
p->next = L2->next;
while(p->next != L2)//m次
p = p->next;
p->next = L1;
delete L2;
}
時間複雜度爲O(m+n)
//兩個尾指針的算法
void union1(CLinkList &r1,CLinkList r2)
{
L1 = r1->next;
L2 = r2->next;
r1->next = L2->next;
r2->next = L1;
delete L2;
r1 = r2;
}
時間複雜度爲O(1)
7.雙向鏈表的存儲結構
typedef struct DLNode{
ElemType data;
struct DLNode *prior;
struct DLNode *next;
}DLNode,*DLinkList;