链表插入和删除
#include
#include
typedef struct Node
{
int id;
struct Node* pNext;
}List;
List* GetNode(int id)
{
List* pTemp = (List*)malloc(sizeof(List));
pTemp->id = id;
pTemp->pNext = NULL;
return pTemp;
}
void AddNode(List** ppHead, List** ppEnd, List* pNode)
{
if (*ppHead == NULL)
{
*ppHead = pNode;
}
else
{
(*ppEnd)->pNext = pNode;
}
*ppEnd = pNode;
}
void InsertNode(List** ppHead,List** ppEnd,List* pNode,int id)
{
List* pMark = *ppHead;
//头插入
if (id == (*ppHead)->id)
{
pNode->pNext = *ppHead;
*ppHead = pNode;
}
//中间插入
while (pMark->pNext!=NULL)
{
if (pMark->pNext->id == id)
{
pNode->pNext = pMark->pNext;
pMark->pNext = pNode;
return;
}
pMark = pMark->pNext;
}
//尾插入
(*ppEnd)->pNext = pNode;
*ppEnd = pNode;
}
void DeleteNode(List** ppHead,List** ppEnd,int id)
{
List* pDel = NULL;
List* pMark = *ppHead;
//头删除
if (id == (*ppHead)->id)
{
pDel = *ppHead;
*ppHead = (*ppHead)->pNext;
free(pDel);
pDel = NULL;
return;
}
//中间删除
while (pMark->pNext != NULL)
{
if (pMark->pNext->id == id)
{
pDel = pMark->pNext;
pMark->pNext = pMark->pNext->pNext;
free(pDel);
pDel = NULL;
//尾删除
if (pMark->pNext == NULL)
{
*ppEnd = pMark;
}
return;
}
pMark = pMark->pNext;
}
}
int main()
{
List* pHead = NULL;
List* pEnd = NULL;
AddNode(&pHead, &pEnd, GetNode(1));
AddNode(&pHead, &pEnd, GetNode(2));
AddNode(&pHead, &pEnd, GetNode(3));
AddNode(&pHead, &pEnd, GetNode(4));
DeleteNode(&pHead, &pEnd, 4);
while (pHead != NULL)
{
printf("%dn",pHead->id);
pHead = pHead->pNext;
}
return 0;
}
随机数
#include
#include
#include
int main()
{
srand((unsigned int)time(NULL));//存放种子
printf("%dn", rand()%12);//0~11
printf("%dn", rand()%11+12);//12~22
printf("%dn", rand()%11+23);//23~33
printf("%dn", rand()%17);
return 0;
}