C,数据结构
目录
1、理解单链表的结构特点。
2、掌握单链表的基本操作。
二、实验内容
1、建立并输出一个单链表。
A.首先要定义单链表的数据结构;
B. 编写一个函数使用“头插法”或“尾插法”创建一个单链表,例如:
LinkList createList(LinkList L,int n){
………
}
C.编写一个函数(showList)能够显示一个单链表中各结点的值。
D、编写一个函数(freeList)能够将单链表中的各个结点都释放。
E、 编写主函数(main) 。
F、 以下的部分代码仅供参考。
三、源程序
#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;//声明
//LNode是结构体类型名,*LinkList是指向结构体的普通指针,相当于LNode *LinkList这样的定义,LNode *p中p是结构体指针,非普通指针,LinkList p中p是普通指针,指向LNode类型结构体的指针
LinkList createList(LinkList L,int n){//头插法//L就是指针,下面才是->
int i;
LinkList p;
L=(LinkList) malloc (sizeof(LNode)); //LinkList就是*类型
L->next=NULL;
for(i=1;i<=n;i++){
p=(LinkList) malloc (sizeof(LNode));
scanf("%d",&p->data);//书上为类c语言
p->next=L->next;
L->next=p;
}
return L;
}
LinkList createList(LinkList L,int n){//尾插法
int i;
LinkList p,q;
L=(LinkList) malloc (sizeof(LNode));
L->next=NULL;
q=L;
for(i=1;i<=n;i++){
p=(LinkList) malloc (sizeof(LNode));
scanf("%d",&p->data);
q->next=p;
q=p;
}
q->next=NULL;
return L;
}
void showList(LinkList L){//输出带头结点的单链表L中各个结点的值,不包括头结点
LinkList p;
p=L->next;
while(p){
printf("%d ",p->data);
p=p->next;
}
}
void freeList(LinkList L){//将带头结点的单链表L的各个结点都释放
LinkList p,q;
p=L->next;
while(p){
q=p->next;
free(p);
p=q;
}
}
void main(){
LinkList La=NULL;//整个节点是空吗
La=createList(La,5);//创建带头结点单链表La,如果需要La递增,注意自己录入数据的次序
showList(La);//显示带头结点单链表La中各个结点的值
//可以用类似的方法创建带头结点的单链表Lb
freeList(La);//释放La中的各个结点(包括头结点)
}
//Status ListInsert_L(LinkList &L,int i,ElemType e){
// p=L;j=0;
// while(p&&j<i-1)
// {
// p=p->next;++j;
// }
// if(!p || j>i-1)return ERROR;
// s=(LinkList)malloc(sizeof(LNode));
// s->data=e;
// s->next=p->next;
// p->next=s;
// return OK;
//}//插入元素