由于链表在空间上的合理应用使得它在进行添加和删除时比较节约资源,但是在进行一些操作,比如在链表尾部插入数据不方便,不易获取链表的长度等。因此在使用单链表时需要对它的数据进行重新定义。
今天先实现该链表最基本的创建和读取操作:
#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int ElemType;
typedef int Status;
typedef struct LNode
{
ElemType data;
struct LNode *next;
}*Link, Position;
typedef struct
{
Link head,tail;
int length;
}LinkList;
Status InitList(LinkList *L, int n);
Status ShowList(LinkList L);
int main(void)
{
printf("带有头节点和尾节点的链表\n");
LinkList myLinkList;
InitList(&myLinkList, 10);
ShowList(myLinkList);
system("pause");
}
Status InitList(LinkList *L, int n)
{
Link p,s;
L->head = (Link)malloc(sizeof(Link));
L->length = 0;
s = L->head;
int i = 0;
while(i<n)
{
p = (Link)malloc(sizeof(Link));
p->data = i+1;
s->next = p;
s = p;
i++;
L->length++;
}
s->next = NULL;
return OK;
}
Status ShowList(LinkList L)
{
Link p = L.head;
printf("链表的长度是%d\n", L.length);
do
{
p = p->next;
printf("%d\t",p->data);
}while(p->next);
return OK;
}
接下来将实现一些其他操作见严蔚敏版数据结构第37页中做定义的函数,接下来几篇博客中我将依次实现他们。