1.设计一个程序将输入的数据建立成链表、输出链表数据并在程序结束后释放。 2.设计一个查找链表中的数据的程序
1.设计一个程序将输入的数据建立成链表、输出链表数据并在程序结束后释放。 解: 1)链表的建立:先声明一个首节点Head,并将Head->Next设为NULL。每输入一个数据就声明一个新节点New,把New->Next设为NULL,并且链接到之前列表的尾端。 2)链表数据的输出:先将Pointer节点的指针指向第一个节点,将Pointer节点(即第一个节点)的数据输出。然后再将Pointer节点的指针指向Pointer指针的的指针(即下一节点),将pointer节点(即第一节点)的数据输出。重复执行此步聚直到Pointer指针指向NULL为止。 3)链表的释放:先将Pointer节点的指针指向第一个节点,然后再将首节点设为首节点的指针(即下一节点)。将Pointer节点(即第一节点)释放。重复执行此步聚直到首节点的指针指向NULL为止。 程序代码如下: #include<stdlib.h> #include<stdio.h> #define Max 10 struct List /*节点结构声明*/ { int Number; char Name[Max]; struct List *Next; }; typedef struct List Node; typedef Node *Link; /*释放链表*/ void Free_List(Link Head) { Link Pointer; /*节点声明*/ while(Head!=NULL) /*当节点为NULL,结束循环*/ { Pointer=Head; Head=Head->Next; /*指向下一个节点*/ free(Pointer); } } /*输出链表*/ void Print_List(Link Head) { Link Pointer; /*节点声明*/ Pointer=Head; /*Pointer指针设为首节点*/ while(Pointer!=NULL) /*当节点为NULL结束循环*/ { printf("##Input Data##\n"); printf("Data Number: %d\n",Pointer->Number); printf("Data Name: %s\n",Pointer->Name); Pointer=Pointer->Next; /*指向下一个节点*/ } } /*建立链表*/ Link Create_List(Link Head) { int DataNum; /*数据编号*/ char DataName[Max]; /*数据名称*/ Link New; /*节点声明*/ Link Pointer; /*节点声明*/ int i; Head=(Link)malloc(sizeof(Node)); /*分配内存*/ if(Head==NULL) printf("Memory allocate Failure!\n"); /*内存分配夫败*/ else { DataNum=1; /*初始数据编号*/ printf("Please input the data name:"); scanf("%s",DataName); Head->Number=DataNum; /*定义首节点数据编号*/ for(i=0;i<=Max;i++) Head->Name[i]=DataName[i]; Head->Next=NULL; Pointer=Head; /*Pointer指针设为首节点*/ while(1) { DataNum++; /*数据编号递增*/ New=(Link)malloc(sizeof(Node)); /*分配内存*/ printf("Please input the data Name:"); scanf("%s",DataName); if(DataName[0]=='0') /*输入0则结束*/ break; New->Number=DataNum; for(i=0;i<Max;i++) { New->Name[i]=DataName[i]; } New->Next=NULL; Pointer->Next=New; /*将新节点串连在原列表尾端*/ Pointer=New; /*列表尾端节点为新节点*/ } } return Head; } /*主程序*/ void main() { Link Head; /*节点声明*/ Head=Create_List(Head); /*调用建立链表函数*/ if(Head!=NULL) { Print_List(Head); /*调用输出链表数据函数*/ Free_List(Head); /*调用释放链表函数*/ } }
运行结果如下:
----------------------------------------------------------
2.设计一个查找链表中的数据的程序 解: 单链表中的数据查找,只能采用线性查找法往下一个节点查找。采用线性查找法查找链表中的数据时与数组不同的是,原来数组是用递增数组索引来查找数据,在链表中是往下一个节点查找。 程序代码如下: #include<stdio.h> #include<stdlib.h> #define Max 10 struct List /*结节点结构声明*/ { int Number; int Total; struct List *Next; }; typedef struct List Node; typedef Node *Link; int Data[2][Max]= /*初始化数据*/ {3,9,25,5,7,26,65,80,2,6,1050,3850,1000,5670,2250,9650,2380, 1700,3000,2000}; int SearchTime=0; /*查找次数*/ /*链表查找*/ int List_Search(int Key,Link Head) { Link Pointer; Pointer=Head; /*Pointer指针设为首节点*/ while(Pointer!=NULL) /*当节点为NULL结束循环*/ { SearchTime++; if(Pointer->Number==Key) { printf("Data Number: %d\n",Pointer->Number); printf("Data Total: %d\n",Pointer->Total); return 1; } Pointer=Pointer->Next; /*指向下一个节点*/ } return 0; } /*释放链表*/ void Free_List(Link Head) { Link Pointer; /*节点声明*/ while(Head!=NULL) /*当节点为NULL结束循环*/ { Pointer=Head; Head=Head->Next; /*指向下一个节点*/ free(Pointer); } } /*建立链表*/ Link Create_List(Link Head) { Link New; /*节点声明*/ Link Pointer; /*节点声明*/ int i; Head=(Link)malloc(sizeof(Node)); /*分配内存*/ if(Head==NULL) printf("Memory allocate Failure!\n"); /*内存分配失败*/ else { Head->Number=Data[0][0]; /*定义首节点数据编号*/ Head->Total=Data[1][0]; Head->Next=NULL; Pointer=Head; /*Pointer指针设为首节点*/ for(i=1;i<Max;i++) { New=(Link)malloc(sizeof(Node)); /*分配内存*/ New->Number=Data[0][i]; New->Total=Data[1][i]; New->Next=NULL; Pointer->Next=New; /*将新节点串连在原列表尾端*/ Pointer=New; /*列表尾端节点为新节点*/ } } return Head; } /*主程序*/ void main() { Link Head=NULL; /*节点声明*/ int Num; /*欲查找数据编号*/ Head=Create_List(Head); /*建立链表*/ if(Head!=NULL) { printf("Please input the data number:"); scanf("%d",&Num); if(List_Search(Num,Head)) printf("Search Time=%d\n",SearchTime); else printf("Not Found!\n"); Free_List(Head); /*释放链表*/ } } *运行结果如下:
视频教程列表
文章教程搜索
C语言程序设计推荐教程
C语言程序设计热门教程
|