单向链表(C语言)
typedef struct node { int elem; struct node* next; }DataNode; typedef struct { int count; DataNode* next; }*LinkHead,LinkNode; int Init(LinkHead* L) {//传进来的参数要是有指针符号,那么下面在设变量的时候就不用* LinkHead p = (LinkHead)malloc(sizeof(LinkHead)); DataNode* q = (DataNode*)malloc(sizeof(DataNode)); q->next = NULL; p ->count = 0; p->next = q;//表中的元素初始化 (*L) = p; return 0; }
二:插入操作:
int Insert(LinkHead* L, int elem, int pos) { if (pos<1 || pos>(*L)->count + 1) { return -1; } DataNode* q = (DataNode*)malloc(sizeof(DataNode));//新建一个元素 q->elem = elem; DataNode* p = (*L)->next;//将表中的所有元素提取出来 for (int i = 1; i < pos; i++) { p = p->next;//直到插入的那个元素的位置,之前所有元素遍历(很重要)为了下面方便操作,所以将元素遍历到那个元素的位置,以后就按照这个模式遍历就好 } q->next = p->next;//把将要插入元素位置的后面所有元素赋值到q->next中暂时储存起来,而在q中已经储存进去了那个新元素,那就是第一个elem中 p->next = q;//将插入元素后面的东西再插入进去 (*L)->count += 1; return 0; }
三:删除操作:
int Delete(LinkHead* L, int pos) { if (pos<1 || pos>(*L)->count + 1) return -1; DataNode* p = (*L)->next, * q; for (int i = 1; i <= pos; i++) {//因为要删除,所以要空过那个元素,放到后面 p = p->next; } q = p->next; p->next = q->next; free(q); (*L)->count -= 1; return 0; }