====================》==========鏈表==========》====================》
Status ListInsert(LinkList *L,int i,ElemType e)
{
int j;
LinkList p,s;
p = *L;
j = 1;
while (p && j < i) /* 尋找第i個結(jié)點 */
{
p = p->next;
++j;
}
if (!p || j > i)
return ERROR; /* 第i個元素不存在 */
s = (LinkList)malloc(sizeof(Node)); /* 生成新結(jié)點(C語言標準函數(shù)) */
s->data = e;
s->next = p->next; /* 將p的后繼結(jié)點賦值給s的后繼 */
p->next = s; /* 將s賦值給p的后繼 */
return OK;
}
Status ListDelete(LinkList *L,int i,ElemType *e)
{
int j;
LinkList p,q;
p = *L;
j = 1;
while (p->next && j < i) /* 遍歷尋找第i個元素 */
{
p = p->next;
++j;
}
if (!(p->next) || j > i)
return ERROR; /* 第i個元素不存在 */
q = p->next;
p->next = q->next; /* 將q的后繼賦值給p的后繼 */
*e = q->data; /* 將q結(jié)點中的數(shù)據(jù)給e */
free(q); /* 讓系統(tǒng)回收此結(jié)點,釋放內(nèi)存 */
return OK;
}
====================》==========鏈棧==========》====================》
/* 插入元素e為新的棧頂元素 */
Status Push(LinkStack *S,SElemType e)
{
LinkStackPtr s=(LinkStackPtr)malloc(sizeof(StackNode));
s->data=e;
s->next=S->top; /* 把當(dāng)前的棧頂元素賦值給新結(jié)點的直接后繼,見圖中① */
S->top=s; /* 將新的結(jié)點s賦值給棧頂指針,見圖中② */
S->count++;
return OK;
}
/* 若棧不空,則刪除S的棧頂元素,用e返回其值,并返回OK;否則返回ERROR */
Status Pop(LinkStack *S,SElemType *e)
{
LinkStackPtr p;
if(StackEmpty(*S))
return ERROR;
*e=S->top->data;
p=S->top; /* 將棧頂結(jié)點賦值給p,見圖中③ */
S->top=p->next; /* 使得棧頂指針下移一位,指向后一結(jié)點,見圖中④ */
free(p); /* 釋放結(jié)點p */
S->count--;
return OK;
}
====================》==========鏈隊列==========》====================》
/* 插入元素e為Q的新的隊尾元素 */
Status EnQueue(LinkQueue *Q,QElemType e)
{
QueuePtr s=(QueuePtr)malloc(sizeof(QNode));
if(!s) /* 存儲分配失敗 */
exit(OVERFLOW);
s->data=e;
s->next=NULL;
Q->rear->next = s;
Q->rear = s;
return OK;
}
/* 若隊列不空,刪除Q的隊頭元素,用e返回其值,并返回OK,否則返回ERROR */
Status DeQueue(LinkQueue *Q,QElemType *e)
{
QueuePtr p;
if(Q->front==Q->rear)
return ERROR;
p=Q->front->next; /* 將欲刪除的隊頭結(jié)點暫存給p,見圖中① */
*e=p->data; /* 將欲刪除的隊頭結(jié)點的值賦值給e */
Q->front->next = p->next;
/* 將原隊頭結(jié)點的后繼p->next賦值給頭結(jié)點后繼,見圖中② */
if(Q->rear==p) /* 若隊頭就是隊尾,則刪除后將rear指向頭結(jié)點,見圖中③ */
Q->rear=Q->front;
free(p);
return OK;
}
29.鏈式線性表-鏈表-鏈棧-鏈隊列
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- 一、數(shù)據(jù)結(jié)構(gòu)之順序表總結(jié) 1、定長順序表 頭文件sqlist.h 實現(xiàn)頭文件函數(shù)的文件:sqlist.cpp ex...
- 1. 鏈表的定義 線性表的鏈式存儲結(jié)構(gòu)的特點是用一組任意的存儲單元存儲線性表的數(shù)據(jù)元素,這組存儲單元可以存在內(nèi)存中...
- 單鏈表 建立單鏈表 頭插法 尾插法 插入結(jié)點 表頭插入 表尾插入 表內(nèi)插入 指定位置插入(如下) 刪除結(jié)點
- 雙向鏈表 一、雙向鏈表結(jié)構(gòu) 雙向鏈表結(jié)點結(jié)構(gòu) 既然單鏈表可以有循環(huán)鏈表,那么雙向鏈表當(dāng)然也可以有。 由于這是雙向鏈...
- 循環(huán)鏈表 對于單鏈表,由于每個結(jié)點只存儲了向后的指針,到了尾部標識就停止了向后鏈的操作。也就是說,按照這樣的方式,...