#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct ListNode {
struct ListNode *pNext;
} ListNodeSt;
// 在链表尾部添加
ListNodeSt *AppendListNode(ListNodeSt *pStart, ListNodeSt *pNode)
{
ListNodeSt *pIter = pStart;
if (pStart == NULL && pNode == NULL) {
return NULL;
}
if (pStart == NULL) {
return pNode;
}
while (pIter->pNext) {
pIter = pIter->pNext;
}
pIter->pNext = pNode;
return pStart;
}
ListNodeSt *DeleteEndListNode(ListNodeSt *pList)
{
ListNodeSt *pIterator = pList;
ListNodeSt *pPrev = NULL;
if (pIterator == NULL) {
return NULL;
}
if (pIterator->pNext == NULL) {
free(pIterator);
return NULL;
}
while (pIterator->pNext) {
pPrev = pIterator;
pIterator = pIterator->pNext;
}
free(pIterator);
pPrev->pNext = NULL;
return pList;
}
ListNodeSt *DeleteListNode(ListNodeSt *pList, ListNodeSt *pNode)
{
ListNodeSt *pIterator = pList;
if (pIterator == NULL) {
return NULL;
}
if (pIterator->pNext == NULL && pIterator == pNode) {
free(pNode);
return NULL;
}
while (pIterator->pNext) {
if (pIterator->pNext == pNode) {
pIterator->pNext = pNode->pNext;
break;
}
pIterator = pIterator->pNext;
}
free(pNode);
return pList;
}
enum CalType {
CAL_ADD = 0,
CAL_SUBTRACT,
CAL_MULTIPLY,
CAL_DIVIDE
};
typedef int (*pfnCal)(int left, int right);
typedef struct CalculateItem {
struct CalculateItem *pNext;
int iType;
pfnCal pfnOp;
} CalculateItemSt;
int add(int left, int right)
{
printf("%d + %d = %d\n", left, right, left + right);
return left + right;
}
int subtract(int left, int right)
{
printf("%d - %d = %d\n", left, right, left - right);
return left - right;
}
int multiply(int left, int right)
{
printf("%d * %d = %d\n", left, right, left * right);
return left * right;
}
int divide(int left, int right)
{
if (right == 0) {
printf("error, right value can't be 0!\n");
return 0;
}
printf("%d / %d = %d\n", left, right, left / right);
return left / right;
}
int main()
{
CalculateItemSt *pCal = NULL;
CalculateItemSt *pStart = NULL;
CalculateItemSt *pIter = NULL;
int arrType[] = {CAL_ADD, CAL_SUBTRACT, CAL_MULTIPLY, CAL_SUBTRACT};
pfnCal arrOp[] = {add, subtract, multiply, divide}; // operate
char *arrName[] = {"add", "subtract", "multiply", "divide"};
int i = 0;
for (; i < sizeof(arrType) / sizeof(int); i++) {
pCal = (CalculateItemSt *)malloc(sizeof(CalculateItemSt));
if (pCal == NULL) {
return -1;
}
pCal->iType = arrType[i];
pCal->pfnOp = arrOp[i];
pCal->pNext = NULL;
pStart = (ListNodeSt *)AppendListNode((ListNodeSt *)pStart, (ListNodeSt *)pCal);
}
pIter = pStart;
while (pIter) {
printf("operation: %s\n", arrName[pIter->iType]);
pIter->pfnOp(5, 9);
pIter = pIter->pNext;
}
system("pause");
return 0;
}
MyList
最新推荐文章于 2022-01-09 17:36:41 发布