功能實(shí)現(xiàn):
站在用戶的角度思考問題,與客戶深入溝通,找到南澳網(wǎng)站設(shè)計(jì)與南澳網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名與空間、虛擬主機(jī)、企業(yè)郵箱。業(yè)務(wù)覆蓋南澳地區(qū)。尾插
頭插
頭刪
尾刪
在指定索引位置增刪
先創(chuàng)建一個(gè)結(jié)構(gòu)體
#pragma once
#includeusing namespace std;
typedef int SLTDateType;
typedef struct SListNode
{
SLTDateType data;
//指向下一個(gè)結(jié)構(gòu)體的指針
struct SListNode* next;
}SLNode;
打印結(jié)構(gòu)體里面的數(shù)據(jù)函數(shù)
void sout(SListNode* pphead)
{
SListNode* temp = pphead;
while (temp != NULL)
{
cout<< temp->data<< endl;
temp = temp->next;
}
}
//創(chuàng)建一個(gè)SListNode*節(jié)點(diǎn)
SListNode* initListNode(SLTDateType x)
{
SListNode* newnode = (SListNode*)malloc(sizeof(SListNode));
if (newnode == NULL)
{
cout<< "節(jié)點(diǎn)創(chuàng)建失敗"<< endl;
exit(-1);
}
newnode->data = x;
newnode->next = NULL;
return newnode;
}
實(shí)現(xiàn)尾插
這里要改變指針指向所以要傳二級指針
void SListPushBack(SListNode** pphead, SLTDateType x)
{
//創(chuàng)建一個(gè)新節(jié)點(diǎn)存數(shù)據(jù)
SListNode* newnode = initListNode(x);
//防止空指針
if (*pphead == NULL)
{
*pphead = newnode;
}
else
{
SListNode* tail = *pphead;
//找到尾節(jié)點(diǎn)
while (tail->next != NULL)
{
tail = tail->next;
}
//尾節(jié)點(diǎn)的指針指向新開辟的結(jié)構(gòu)體地址
tail->next = newnode;
}
}
簡單測試一下
int main()
{
SListNode* plist = NULL;
SListPushBack(&plist, 1);
SListPushBack(&plist, 2);
SListPushBack(&plist, 3);
sout(plist);
}
頭插
void SListPushFront(SListNode** pphead, SLTDateType x)
{
SListNode* newnode = initListNode(x);
newnode->next = *pphead;
*pphead = newnode;
}
尾刪
void SListPopBack(SListNode** pphead)
{
//空
if (*pphead == NULL) return;
//一個(gè)節(jié)點(diǎn)
if ((*pphead)->next == NULL)
{
free(*pphead);
*pphead = NULL;
}
//三個(gè)及以上
else
{
SListNode* tail = *pphead;
SListNode* tail2 = NULL;//記錄倒數(shù)第二個(gè)
while (tail->next != NULL)
{
tail2 = tail;
tail = tail->next;
}
tail2->next = NULL;
free(tail);
tail = NULL;
}
}
測試一下
頭刪
void SListPopFront(SListNode** pphead)
{
if (*pphead == NULL)
return;
SListNode* head = ( * pphead)->next;
free(*pphead);//釋放刪除節(jié)點(diǎn)的空間
*pphead = head;
}
查找,返回的是這個(gè)節(jié)點(diǎn)的指針,為下面的插入可以服務(wù)
SListNode* SListFind(SListNode* phead, SLTDateType x)
{
SListNode* temp = phead;
while (temp )
{
if ((temp->data )== x)
return temp;
else
temp = temp->next;
}
return NULL;
}
插入指定位置前
//在POS位置前插入x
void SListInsertForward(SListNode** pphead, SListNode* pos, SLTDateType x)
{
SListNode* newnode = initListNode(x);
if (*pphead == pos)//pos是第一個(gè)節(jié)點(diǎn)
{
newnode->next= *pphead;
*pphead = newnode;
}
else
{
SListNode* posPrev = *pphead;
while (posPrev->next != pos)
{
posPrev = posPrev->next;
}
posPrev->next = newnode;
newnode->next = pos;
}
}
插入指定位置后
void SListInsertAfter(SListNode* pos, SLTDateType x)
{
assert(pos);
SListNode* newnode = initListNode(x);
newnode->next = pos->next;
pos->next = newnode;
}
刪除指定元素
void SListErase(SListNode** pphead, SListNode* pos)
{
assert(pphead);
if (*pphead == pos)//pos是第一個(gè)節(jié)點(diǎn)
{
*pphead = pos->next;
free(pos);
//或調(diào)用頭刪SListPopFront(pphead);
}
else
{
SListNode* prev = *pphead;
while (prev->next!=pos)
{
prev = prev->next;
}
prev->next = pos->next;
free(pos);
//pos = NULL;沒必要
}
}
刪除指定元素后一個(gè)
void SListEraseAfter(SListNode* pos)
{
if (pos->next = NULL)return;
SListNode* next = pos->next;
pos->next = next->next;
free(next);
}
刪除鏈表
void SListDeatory(SListNode** pphead)
{
assert(pphead);
SListNode* temp = *pphead;
while (temp)
{
SListNode* next = temp->next;
free(temp);
temp = next;
}
*pphead = NULL;
}
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧