1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
| #include<stdio.h> #include<string.h> #include<malloc.h> #pragma warning(disable:4996) typedef struct student//结构体本体 { int elem; char num; struct student *next; }link; link * creatLink(int * initelem, int len) //头插法初始化链表 { int i; //最初状态下,头指针 H 没有任何结点,所以,插入第一个元素,就相当于是创建结点 H link *H = (link*)malloc(sizeof(link)); H->elem = initelem[0]; H->next = NULL; //如果采用头插法插入超过 1 个元素,则可添加到第一个结点 H 之前 for (i = 2; i < len*2; i++) { link * a = (link*)malloc(sizeof(link)); a->elem = initelem[i]; //插入元素时,首先将插入位置后的链表链接到新结点上 scanf_s("%c", &(a->num)); a->next = H; //然后再链接头指针 H H = a; } return H; } void display(struct student *p) //打印函数 { while (((p->elem) > 1) && ((p->elem) = 1)) { printf("%c", p->num); p = p->next; } printf("\n"); } int Length(struct student * L)//表长统计函数 { int len = 0; //统计表长 struct student *p = L; while (p->next != NULL) { p = p->next; len = len + 1; } return len/2; } int main(void) { int a, i; int elem[20] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 }; printf(" 栈长度:"); scanf("%d", &i); link *Head = creatLink(elem, i + 1);//建立动态存储链表 printf("\n结构体总长度:%d\n", Length(Head));//调用长度统计函数 if (Head->next == NULL) printf("空\n"); else printf("非空\n");//判断单链表是否为空 display(Head);//调用输出函数 free(Head);//释放栈 system("pause"); return 0; }
|