单链表的头插法和尾插法c语言实现
/*單鏈表的頭插法和尾插法c語言實現*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 100
/*簡單的定義一個鏈表節點的數據單元*/
typedef struct student_t
{
int num;
char name[SIZE];
struct student_t* pNext;
}studentList, *pStudentList;
/*定義一個全局的靜態的鏈表頭節點指針*/
static pStudentList g_pstStudentList = NULL;
/*創建一個學生信息的鏈表節點*/
pStudentList createaOneStudentListNode()
{
pStudentList pNewNode = NULL;
pNewNode = (pStudentList)malloc(sizeof(studentList));
return pNewNode;
}
/*在鏈表頭插入數據節點*/
int addOneStudentToListHead(int num, char* name)
{
pStudentList pNewNode = NULL;
int result = 0;
if ((num < 0) || (name == NULL))
{
result = -1;
printf("error inoput parameter!\n");
return result;
}
pNewNode = createaOneStudentListNode();
pNewNode->num = num;
memcpy(pNewNode->name, name, strlen(name));
pNewNode->pNext = g_pstStudentList;
g_pstStudentList = pNewNode;
return result;
}
/*在鏈表尾部插入數據節點*/
int addOneStudentToListTail(int num, char* name)
{
pStudentList pTempHead = NULL;
pStudentList pTailNode = NULL;
pStudentList pNewNode = NULL;
int result = 0;
if ((num < 0) || (name == NULL))
{
result = -1;
printf("error input parameter!\n");
return result;
}
pTempHead = g_pstStudentList;
while(pTempHead)
{
if (pTempHead->pNext == NULL)
{
pTailNode = pTempHead;
}
pTempHead = pTempHead->pNext;
}
pNewNode = createaOneStudentListNode();
pNewNode->num = num;
memcpy(pNewNode->name, name, strlen(name));
pNewNode->pNext = NULL;
pTailNode->pNext = pNewNode;
return result;
}
/*輸出整個鏈表中的學號信息,檢查插入的是否正確,插入時沒有考慮是否有相同學號*/
void printList()
{
pStudentList pTempHead = NULL;
pTempHead = g_pstStudentList;
while(pTempHead)
{
printf("studnet num = %d\n", pTempHead->num);
pTempHead = pTempHead->pNext;
}
}
/*釋放整個鏈表的資源*/
void freeList()
{
pStudentList pTempHead = NULL;
pStudentList pFree = NULL;
int i = 0;
pTempHead = g_pstStudentList;
pFree = g_pstStudentList;
while(pTempHead)
{
pFree = pTempHead;
printf("free studnet num = %d\n", pTempHead->num);
pTempHead = pTempHead->pNext;
if (pFree != NULL)
{
printf("i = %d\n", i);/*測試是否正確釋放資源*/
free(pFree);
}
++i;
}
}
int main()
{
/*構建頭節點*/
char* cName = "allan";
g_pstStudentList = createaOneStudentListNode();
g_pstStudentList->num = 0;
memcpy(g_pstStudentList->name, cName, strlen(cName));
g_pstStudentList->pNext = NULL;
/*使用尾插法插入數據*/
char* cName1 = "allan1";
addOneStudentToListTail(1,cName1);
/*使用尾插法插入數據*/
char* cName2 = "allan2";
addOneStudentToListTail(2,cName2);
/*使用頭插法插入數據*/
char* cName3 = "allan3";
addOneStudentToListHead(3,cName3);
/*輸出當前鏈表中存儲的學號,沒有考慮學號的唯一性,假設輸入的都是不同數字*/
printList();
/*使用完資源后進行釋放資源,防止內存泄漏*/
freeList();
return 0;
}
?使用VS2008運行結果如下圖所示:
?
轉載于:https://www.cnblogs.com/moyaoyi/p/7253023.html
總結
以上是生活随笔為你收集整理的单链表的头插法和尾插法c语言实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 也来分析为什么支付宝要做社交
- 下一篇: Tkinter图片按钮