#include<stdio.h> #include<stdlib.h> #define false 0 #define ok 1 //定义节点的结构 typedef struct node{ int data; struct node *next; }node; typedef struct node *linklist; //初始化链表,创建一个链表并赋值 void creatlist(linklist *l,int n) { linklist p; (*l) = (linklist)malloc(sizeof(node)); (*l)->next = NULL; int i; for (i = 0; i < n; i++) { p= (linklist)malloc(sizeof(node)); p->data = i; p->next = (*l)->next; (*l)->next = p; } } //链表查询 int getelem(linklist l, int i, int *e) { int k = 1; linklist p=NULL; p = l->next; while (p&&k<i) { p = p->next; k++; } if (!p || k>i) return false; *e = p->data; return ok; } //链表头插法特定位置插入元素 int listinsert(linklist *l, int i, int e) { int k = 1; linklist s=NULL, p=NULL; p = *l; int j = 1; while (p&&j<i) { p = p->next; j++; } if (!p || k>i) return false; s = (linklist)malloc(sizeof(node)); s->data = e; s->next = p->next; p->next = s; return ok; } //链表特定位置删除元素 int listdelete(linklist *l, int i, int *e) { int j = 1; linklist p=NULL, q=NULL; p = *l; while (p&&j<i) { p = p->next; j++; } if (!p->next || j>i) return false; q = p->next; p->next = q->next; *e = q->data; free(q); return ok; } //打印链表 int seelist(linklist l) { linklist p=NULL; p = l->next; int k = 0; while (p) { printf("%4d", p->data); p = p->next; k++; } if (k == 0) { printf("链表为空"); return false; } printf("\n"); return ok; } //删除整个链表 int clearlist(linklist *l) { linklist p = NULL,q=NULL; p = (*l)->next; while (p) { q = p->next; free(p); p = q; } (*l)->next = NULL; return ok; } int main(void) { int a; linklist lb; creatlist(&lb, 5); seelist(lb); listinsert(&lb, 2, 0); seelist(lb); listdelete(&lb, 2, &a); seelist(lb); clearlist(&lb); return 0; }
其结果为: