==================================================================== // list.h #ifndef _SIGNAL_LIST_H_ #define _SIGNAL_LIST_H_ #include <stdio.h> #include <stdlib.h> typedef int ElemType; typedef struct Node{ ElemType E; int key; struct Node *next; }LNode; int SignalListInit(LNode *L); int AddElem(LNode *L, int key, ElemType *E); int FindElem(LNode *L, int key, ElemType *E); int DelElem(LNode *L, int key); int ChangeElem(LNode *L, int key, ElemType *E); int ShowAllElem(LNode *L); int ClearList(LNode *L); #endif =================================================================== // list.c #include "signal_list.h" int SignalListInit(LNode *L) { L->E = 0; L->key = -1; // key大于0 L->next = NULL; } int AddElem(LNode *L, int key, ElemType *E) { if(NULL == L || NULL == E) { printf("AddElem error\n"); return -1; } LNode *tmp_L = (LNode *)malloc(sizeof(LNode)); tmp_L->E = *E; tmp_L->key = key; tmp_L->next = L->next; L->next = tmp_L; // 头插法 return 0; } // 查找第一个key的元素E int FindElem(LNode *L, int key, ElemType *E) { if(NULL == L || NULL == E || NULL == L->next) { printf("find error\n"); return -1; } L = L->next; while(NULL != L) { if(key == L->key) { *E = L->E; return 0; } L = L->next; } // 未找到该元素 return -1; } // 删除第一个key元素 int DelElem(LNode *L, int key) { LNode *tmp_L; if(NULL == L || NULL == L->next) { return -1; } while(NULL != L->next) { tmp_L = L->next; if(key == tmp_L->key) { L->next = tmp_L->next; free(tmp_L); return 0; } L = L->next; } return -1; } int ChangeElem(LNode *L, int key, ElemType *E) { if(NULL == L || NULL == L->next) { printf("find error\n"); return -1; } L = L->next; while(NULL != L) { if(key == L->key) { L->E = *E; return 0; } } return -1; } int ShowAllElem(LNode *L) { if(NULL == L || NULL == L->next) { printf("ShowAllElem error\n"); return -1; } while(NULL != L->next) { printf("TTT---key[%d]--Elem[%d]\n",L->next->key, L->next->E); L = L->next; } return 0; } int ClearList(LNode *L) { if(NULL == L || NULL == L->next) { printf("find error"); return -1; } LNode *tmp_L = L->next; while(NULL != tmp_L) { L->next = tmp_L->next; free(tmp_L); tmp_L = L->next; } return 0; } ================================================================== // main.c #include "signal_list.h" int main() { int i; LNode L; ElemType E; SignalListInit(&L); for(i = 0; i < 10; i++) { E = i; AddElem(&L, i, &E); } ShowAllElem(&L); for(i = 0; i < 10; i++) { E = i; DelElem(&L, i); } ShowAllElem(&L); for(i = 10; i < 20; i++) { E = i; AddElem(&L, i, &E); } FindElem(&L, 19, &E); printf("TTT----find[%d]\n", E); DelElem(&L, 18); DelElem(&L, 17); ShowAllElem(&L); ClearList(&L); ShowAllElem(&L); return 0; } |
|