- #include "stdio.h"
- #include "malloc.h"
- typedef struct node {
- int data;
- node* next;
- }Node;
- typedef struct {
- unsigned char id;
- void(*Func)(Node **head);
- }FuncSt;
- Node* uartListHead = NULL;
- int ListCreat(Node **p_list, int size)
- {
- node* p = NULL;
- int i;
- *p_list = (Node*)malloc(sizeof(Node));
- if (*p_list == NULL)
- {
- return 0;
- }
- (*p_list)->next = NULL;
- for (i = size; i > 0; i--)
- {
- p = (Node*)malloc(sizeof(Node));
- if (p == NULL)
- {
- return 0;
- }
- p->data = i;
- p->next =(*p_list)->next;
- (*p_list)->next = p;
- }
- return 1;
- }
- void ScanPrintList(Node **head)
- {
- Node *p;
- Node *q;
- p = (*head)->next;
- printf("\n\n链表遍历结果如下:\n");
- if (p == NULL)
- {
- printf("空链表\n");
- }
- while(p != NULL)
- {
- printf("%d\t",p->data);
- q = p->next;
- p = q;
- }
- printf("\n\n");
- }
- void ListGetDat(Node **head, int dat)
- {
-
- Node* tempPtr = (Node*)malloc(sizeof(Node));
- Node *p = NULL;
- int count = 0;
- int flag = 0;
- if (tempPtr == NULL)
- {
- return;
- }
- if ((*head)->next == NULL)
- {
- printf("未查到该元素");
- return;
- }
- p = *head;
- while(p != NULL)
- {
- if (p->data == dat)
- {
- printf("第%d个元素是%d\n",count,dat);
- flag = 1;
- }
- p = p->next;
- count++;
- }
- if (flag == 0)
- {
- printf("未查到该元素\n");
- }
- }
- void ListRemoveDat(Node **head, int dat)
- {
-
- Node *p = NULL;
- Node *q = NULL;
- int count = 0;
- int flag = 0;
- if ((*head)->next == NULL)
- {
- printf("未查到该元素 无法删除");
- return;
- }
- p = *head;
- q = p;
- while(p != NULL)
- {
- if (p->data == dat)
- {
- printf("第%d个元素是%d 已删除\n",count,dat);
- flag = 1;
- q->next = p->next;
- free(p);
- p = q;
- }
- q = p;
- p = p->next;
- count++;
- }
- if (flag == 0)
- {
- printf("未查到该元素 无法删除\n");
- }
- }
- void ListRemoveDatTest(Node **head)
- {
- int temp;
- printf("remove input:\n");
- scanf("%d",&temp);
- ListRemoveDat(head, temp);
- }
- void ListGetDatTest(Node **head)
- {
- int temp;
- printf("aim input:\n");
- scanf("%d",&temp);
- ListGetDat(head, temp);
- }
- void ListTailAdd(Node **head, int dat)
- {
-
- Node* tempPtr = (Node*)malloc(sizeof(Node));
- Node *p = NULL;
- if (tempPtr == NULL)
- {
- return;
- }
- if ((*head)->next == NULL)
- {
- (*head)->next = tempPtr;
- tempPtr->data = dat;
- tempPtr->next = NULL;
- return;
- }
- p = *head;
- while(p->next != NULL)
- {
- p = p->next;
- }
- p->next = tempPtr;
- tempPtr->data = dat;
- tempPtr->next = NULL;
- }
- void TailAddTest(Node **head)
- {
- int temp;
- printf("value input:\n");
- scanf("%d",&temp);
- ListTailAdd(head, temp);
- }
- void ListClean(Node **head)
- {
- Node *p = NULL;
- while((*head)->next != NULL)
- {
- p = (*head)->next;
- (*head)->next = p->next;
- free(p);
- }
- }
- FuncSt g_funcTable[] = {
- {1, ListClean},
- {2, TailAddTest},
- {3, ListGetDatTest},
- {4, ScanPrintList},
- {5, ListRemoveDatTest},
- };
- void FnucHandleTask(unsigned char id)
- {
- for (int i = 0; i < (sizeof(g_funcTable) / sizeof(g_funcTable[0])); i++)
- {
- if (id == g_funcTable[i].id)
- {
- g_funcTable[i].Func(&uartListHead);
- break;
- }
- }
- }
- void InitPrnt(void)
- {
- printf("1:链表清空\t2:尾部添加元素\t3:查找指定元素\t4:遍历链表\t5:删除指定元素\t6:指定位置数据更改\t\n");
- }
- int main()
- {
- unsigned char testCategory;
- if (ListCreat(&uartListHead, 10) == 1)
- {
- printf("list creat succes!\n");
- }
- while(1)
- {
- InitPrnt();
- scanf("%d",&testCategory);
- FnucHandleTask(testCategory);
- }
- return 1;
- }
复制代码
【必读】版权免责声明
1、本主题所有言论和内容纯属会员个人意见,与本论坛立场无关。2、本站对所发内容真实性、客观性、可用性不做任何保证也不负任何责任,网友之间仅出于学习目的进行交流。3、对提供的数字内容不拥有任何权利,其版权归原著者拥有。请勿将该数字内容进行商业交易、转载等行为,该内容只为学习所提供,使用后发生的一切问题与本站无关。 4、本网站不保证本站提供的下载资源的准确性、安全性和完整性;同时本网站也不承担用户因使用这些下载资源对自己和他人造成任何形式的损失或伤害。 5、本网站所有软件和资料均为网友推荐收集整理而来,仅供学习用途使用,请务必下载后两小时内删除,禁止商用。6、如有侵犯你版权的,请及时联系我们(电子邮箱1370723259@qq.com)指出,本站将立即改正。
|
|