C语言——实现用链表存储学生信息,当输入0退出输入,并查找学号为3的学生是否存在
生活随笔
收集整理的這篇文章主要介紹了
C语言——实现用链表存储学生信息,当输入0退出输入,并查找学号为3的学生是否存在
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
功能實現:
1、往鏈表內錄入學生的學號信息;
2、當輸入的學號為0時候,退出錄入;
3、查找鏈表內是否有學號為3的學生。
編譯執行結果:
代碼實現:
#include <stdlib.h> #include <stdio.h>#define LEN sizeof(struct student)struct student {int num; //學號struct student *next;//指向下一個節點的指針 }; int n ; //節點的總數 /*功能:創建鏈表* 返回:指向鏈表表頭的指針*/ struct student *Create() {struct student *head; //頭節點struct student *p1 = NULL; //p1保存創建的新節點的地址struct student *p2 = NULL; //P2保存原鏈表最后一個節點的地址n = 0; //創建前鏈表的節點總數為0,空鏈表p1 = (struct student *)malloc(LEN); //開辟一個新節點p2 = p1; //如果節點開辟成功,則將p2先把它的指針保存下來以備后用if(p1 == NULL) {printf("Cann`t create it, try it again in a moment\n");return NULL;}else{head = NULL; //開始head指向nullprintf("Please input %d node -- num:",n+1);scanf("%d",&(p1->num)); //錄入數據}while(p1->num != 0) //只要學號不為0 就繼續錄入下一個{n += 1;if(n == 1)//如果節點總數是1, 則head指向剛創建的節點p1{head = p1;p2->next = NULL; //此時的p2就是p1,也就是p1->next指向NULL。}else{p2->next = p1; //指向上次下面剛開辟的新節點}p2 = p1; //把p1的地址給p2保留,然后p1產生新的節點p1 = (struct student *)malloc(LEN);printf("Please input %d node -- num:",n+1);scanf("%d",&(p1->num)); //錄入數據}p2->next = NULL; //此句就是根據單向鏈表的最后一個節點要指向nullfree(p1); //p1->num為0的時候跳出了while循環,并釋放p1p1 = NULL; //釋放的變量 清空為nullreturn head; //返回創建鏈表的頭指針 }/* 功能:輸出節點* 返回:void* */ void Print(struct student *head) {struct student *p;printf("Now,These %d records are:\n",n);p = head; if(head != NULL) //只要不是空鏈表,就輸出鏈表中所有節點{printf("head is %o\n",head); //輸出頭指針指向的地址}do{printf("%o %d %o\n",p, p->num, p->next);p = p->next;}while(p != NULL); }int find(struct student *head, int i) {struct student *p;p = head->next;while(p){if(p->num == i)return 1;p = p->next;}return 0; }int main() {struct student *head;struct student *stu;int thenumber; head = Create();Print(head);if(find(head, 3) == 1)printf("have\n");elseprintf("no have\n");return 0; }?
總結
以上是生活随笔為你收集整理的C语言——实现用链表存储学生信息,当输入0退出输入,并查找学号为3的学生是否存在的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 函数 —— fork()将运行着的程序分
- 下一篇: Makefile —— Makefile