索性写写链表程序,直接上代码:
#include<stdio.h>
#include<stdlib.h>
struct Node
{
int data;
struct Node* Next;
};
//生成链表的节点
void CreatNewNode(struct Node* Head,int lenth)
{
int i=0;
for(i=0;i<lenth;i++)
{
struct Node* NewNode=(struct Node*)malloc(sizeof(struct Node));
if(NewNode!=NULL)
{
Head->Next=NewNode;
Head=NewNode;
}
else
{
exit(-1);
}
}
}
//初始化链表
void InitList(struct Node* Head)
{
int count=0;
while(Head->Next!=NULL)
{
count++;
printf("请输入第%d个节点的数据:",count);
scanf("%d",&Head->Next->data);
Head=Head->Next;
}
}
//统计链表当中节点的个数
int Statistic(struct Node* Head)
{
int lenth=0;
while(Head->Next!=NULL)
{
lenth++;
Head=Head->Next;
}
return lenth;
}
//插入节点
void InsertNode(struct Node* Head)
{
int lenth=Statistic(Head);
printf("目前总共有%d个节点\n",lenth);
int n;
printf("输入你想在第几个几点插入新节点:");
scanf("%d",&n);
while(n--)
{
Head=Head->Next;
}
struct Node* NewNode=(struct Node*)malloc(sizeof(struct Node));
int num;
printf("请输入你想插入的数据:");
scanf("%d",&num);
NewNode->data=num;
NewNode->Next=Head->Next;
Head->Next=NewNode;
}
//删除节点
void DeleteNode(struct Node* Head)
{
int n;
printf("输入你想删除第几个节点:");
scanf("%d",&n);
while(--n)
{
Head=Head->Next;
}
Head->Next=Head->Next->Next;
}
//冒泡排序链表数据
void BubbleSort(struct Node* Head)
{
int i,j;
//这里是为了统计链表的节点个数,因为增,删节点会改变节点个数
int lenth=Statistic(Head);
struct Node* pHead=Head;
for(i=0;i<lenth-1;i++)
{
for(j=0;j<lenth-i-1;j++)
{
if(pHead->Next->data>pHead->Next->Next->data)
{
int temp;
temp=pHead->Next->data;
pHead->Next->data=pHead->Next->Next->data;
pHead->Next->Next->data=temp;
}
//比完一次就往后移动一次
pHead=pHead->Next;
}
//一轮结束后,pHead要重新指向头结点,不然会导致越界访问,程序崩掉
pHead=Head;
}
}
//打印链表
void PrintList(struct Node* Head)
{
while(Head->Next!=NULL)
{
printf("%-4d",Head->Next->data);
Head=Head->Next;
}
printf("\n");
}
int main()
{
//创建链表的头结点
struct Node* Head=(struct Node*)malloc(sizeof(struct Node));
if(Head==NULL)
{
//如果创建失败直接退出程序
exit(-1);
}
else
{
//创建成功就把头结点的指针域置空,养成好习惯,只要有指针就先置空
Head->Next=NULL;
}
int lenth;
printf("请输入你想生成的节点的个数:");
scanf("%d",&lenth);
CreatNewNode(Head,lenth);
InitList(Head);
PrintList(Head);
InsertNode(Head);
PrintList(Head);
DeleteNode(Head);
PrintList(Head);
BubbleSort(Head);
PrintList(Head);
//释放头结点指向的那块空间
free(Head);
return 0;
}
OK,以上就是我按照自己的写法写的一个链表,基本的功能都有包括,如果想做成学生管理系统你能不看我的源码把这些全部写出来的话,做什么都不是问题,这个只是基础,要先把基础打扎实才能玩更牛逼的项目。