新聞中心
#include
#include;
#include
//特別注意要傳二級指針因為如果要改變一指針的值必須用二級指針,可以類比一下調(diào)用函數(shù)改變字母值
typedef int SLDataType; ?//下一個節(jié)點數(shù)據(jù)類型容易改變
typedef struct SListNode
{
?SLDataType data;
?struct SListNode* next;
}SListNode;//定義一個結(jié)構(gòu)體儲存數(shù)據(jù)和下一個節(jié)點地址
void SListInitNode(SListNode** plist)
{
?assert(plist);
?*plist = (SListNode*)malloc(sizeof(SListNode));
?assert(*plist);
?(*plist)->data = 0;
?(*plist)->next = NULL;
} //初始化結(jié)構(gòu)體;
void SListPrint(SListNode* phead)
{
?SListNode* cur = phead;
?while (cur != NULL)
?{
??? ?printf("%d->", cur->next);
??? ?cur = cur->next;
?}
}//打印函數(shù)
定義可以申請節(jié)點不必每次調(diào)用函數(shù)都要寫,簡化代碼
SListNode* BuyListNode(SLDataType x)
{
?SListNode* newnode = (SListNode*)malloc(sizeof(SListNode));
?if (newnode == NULL)
?{
??? ?printf("fail");
??? ?exit(-1);
?}
?newnode->data = x;
?newnode->next = NULL;
?return newnode;
}
//尾插
void SListPushBack(SListNode** plist, SLDataType x)
{
?assert(plist);//避免空指針
?SListNode* newnode = BuyListNode(x);
?newnode->data = x;
?newnode->next = NULL;
?if (*plist == NULL)
?{
??? ?*plist = newnode;
?}
?else
?{
??? ?SListNode* tail = *plist;
??? ?while (tail->next != NULL)
??? ?{
??? ??? ?tail = tail->next;
??? ?}
??? ?tail->next = newnode;
?}
?
?
}
//尾刪
void SListPopBack(SListNode** plist)
{
?if (*plist == NULL)
?{
??? ?return;
?}
?assert(*plist != NULL);
?SListNode* prev = NULL;
?SListNode* tail = *plist;
?while (tail->next)
?{
??? ?prev = tail;
??? ?tail = tail->next;
?}
?free(tail);
?tail = NULL;
?if (prev)
?{
??? ?prev->next = NULL;
?}
}
//頭刪
void SListPopFront(SListNode** plist)
{
?assert(*plist != NULL);
?SListNode* next = (*plist)->next;
?free(*plist);
?*plist = next;
}
//頭插
void SListNodePushFront(SListNode** plist, SLDataType x)
{
?assert(*plist);
?SListNode* newnode = BuyListNode(x);
?newnode->next = *plist;
?*plist = newnode;
}
//發(fā)現(xiàn)節(jié)點位置,發(fā)現(xiàn)這個節(jié)點后要在這個節(jié)點前面插入
SListNode* SListFind(SListNode* plist, SLDataType x)
{
?SListNode* cur = plist;
?while (cur)
?{
??? ?if (cur->data == x)
??? ?{
??? ??? ?return cur;
??? ?}
??? ?else
??? ?{
??? ??? ?cur = cur->next;
??? ?}
?}
?return NULL;
}
//在任意位置插入;前面的代碼尾插,尾刪,頭插,頭刪又可以嵌套這個在任意位置插入的代碼極大的改變代碼長度
void SListInsert(SListNode** plist, SListNode* pos, int x)
{
?assert(*plist != NULL);
?if (*plist == pos)//如果只有一個節(jié)點的話
?{
??? ?SListNodePushFront(&plist, x);
?}
?SListNode* cur = *plist;
?SListNode* prevcur = NULL;
?while (cur != pos)
?{
??? ?prevcur = cur;
??? ?cur = cur->next;
?}
?SListNode* newnode = BuyListNode(x);
?newnode->next = pos;
?prevcur->next = newnode;
?
}
int main()
{
?//可以調(diào)用各種函數(shù)接口進行測試
?SListNode* plist;
?SListInitNode(&plist);
?SListPushBack(&plist, 1);
?SListPushBack(&plist, 1);
?SListPrint(plist);
?return 0;
}
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
新聞名稱:單鏈表實現(xiàn)c語言-創(chuàng)新互聯(lián)
轉(zhuǎn)載源于:http://biofuelwatch.net/article/csjjpd.html