2016年7月14日16:22:48
单链表的基本运算有:
1.单链表的创建;
2.单链表的插入;
3.判断单链表是否为空;
4.求单链表的长度;
5.根据内容查找元素;
6.根据序号查找单链表;
7.单链表的插入;
8.单链表的删除;
9.单链表的遍历;
10.销毁单链表;
#include<stdio.h>
typedef struct
{
long num;
char name[10];
float score;
}STUDNET;
typedef struct node
{
STUDNET data;
struct node * pNext;
}linkList ;
void showMenu(void);
void initList(linkList * pHead);
int isEmpty(linkList * pHead);
void inputInfor(linkList * pNew);
linkList * createList(linkList * pHead, int len );
linkList * insertNode(linkList * pHead,linkList * cur,int pos);
linkList * deleteNode(linkList * pHead,int pos ,linkList * pDelete)
void traverseList(linkList * pHead);
void showMenu(void)
{
printf("___________________________________________\n");
printf(" 欢迎使用学生成绩管理系统\n");
printf("\t 【1】创建学生信息\n");
printf("\t 【2】插入学生信息\n");
printf("\t 【3】删除学生信息\n");
printf("\t 【4】显示学生信息\n");
printf("\t 【5】退出系统\n");
printf("___________________________________________\n");
return;
}
void initLinkList(linkList * pHead)
{
pHead = (linkList *)malloc(sizeof(linkList));
if(NULL == pHead)
{
printf("动态内存分配失败!\n");
return ;
}
pHead->pNext = NULL;
}
int isEmpty(linkList * pHead)
{
if(NULL == pHead->pNext)
return 1;
else
return 0;
}
void inputInfor(linkList * pNew)
{
printf("学号=");
scanf("%d",&pNew->data.num);
printf("姓名=");
scanf("%s",pNew->data.name);
printf("分数=");
scanf("%d",&pNew->data.score);
return;
}
linkList * createList(linkList * pHead, int len )
{
linkList * pNew, * pTail;
int i;
pTail = pHead;
for(i = 0;i<len;i++)
{
pNew = (linkList * )malloc(sizeof(linkList));
if(NULL == pNew)
{
printf("动态内存分配失败!\n");
return NULL;
}
inputInfor(pNew);
pTail->pNext = pNew;
pNew->pNext = NULL;
pTail = pNew;
}
return pHead;
}
linkList * insertNode(linkList * pHead,linkList * cur,int pos)
{
linkList * prev = pHead;
int i;
while(pos<1||pos>pHead->data.num+1)
{
return NULL;
}
for(i = 1;i<pos;i++)
{
prev = prev->pNext;
}
if(prev->pNext==NULL)
{
prev->pNext = cur;
cur->pNext = NULL;
pHead->data.num ++;
}
else
{
cur->pNext = prev ->pNext;
prev->pNext = cur;
pHead->data.num++;
}
return pHead;
}
linkList * deleteNode(linkList * pHead,int pos ,linkList * pDelete)
{
linkList * prev;
linkList * cur;
int i;
prev = pHead;
if(NULL == pHead->pNext)
{
printf("链表为空,不能删除元素!\n");
return NULL;
}
while(pos<1||pos>pHead->data.num)
{
return NULL;
}
for(i = 1;i<pos;i++)
{
prev = prev->pNext;
}
cur = prev->pNext;
if(NULL == cur->pNext )
{
prev->pNext = NULL;
*pDelete = *cur;
free(cur);
pHead->data.num--;
}
else
{
prev->pNext = cur->pNext;
*pDelete = *cur;
free(cur);
pHead->data.num--;
}
return pHead;
}
void traverseList(linkList * pHead)
{
int i = 0;
linkList * p = NULL;
p = pHead->pNext;
printf(" 学号 姓名 分数 \n");
if(NULL == p)
{
printf("链表为空!\n");
}
else
{
while(NULL != p)
{
printf("第%d个学生 ",i+1);
printf("%-7ld%-7s%-6.2f\n",p->data.num,p->data.name,p->data.score);
p = p->pNext;
i++;
}
}
return;
}