今天画了大半天的时间,就着《大话数据结构》又回忆了一下从线性表到队列的(主要是链式存储结构)知识,自己独立的敲完了各种结构接口函数,也都调试出来了。
嗯,自己能独立的敲出来并调试出来,还是挺开心!努力学习C语言,我看好你哦!
把今天复习的都贴上来,以便日后复习!
v 线性表的链式存储结构
/*LinkList.h函数*/
#ifndef _LINKLIST_H_
#define _LINKLIST_H_
#define SUCCESS 1000000
#define FAILURE -1000000
typedef int Elemtype;
struct Node
{
Elemtype data;
struct Node *next;
};
typedef struct Node Node;
typedef struct Node *LinkList;
int InitLink(LinkList *L);
int InsertLink(LinkList L,int pos,Elemtype e);
int TraverseLink(LinkList L);
int LengthLink(LinkList L);
int DeleteLink(LinkList L,int pos,Elemtype *e);
int LocateLink(LinkList L,Elemtype e);
int RevereLink(LinkList L);
#endif
/*Main.c函数*/
#include <stdio.h>
#include "LinkList.h"
int main()
{
LinkList LinkList;
int ret;
int i;
Elemtype e;
ret = InitLink(&LinkList);
if(SUCCESS == ret)
{
printf("Init success!\n");
}
else
{
printf("Init failure!\n");
}
for(i = 0;i < 5;i++)
{
ret = InsertLink(LinkList,i+1,i);
if(SUCCESS == ret)
{
printf("Insert %d success!\n",i);
}
else
{
printf("Insert %d failure!\n",i);
}
}
ret = TraverseLink(LinkList);
if(FAILURE == ret)
{
printf("Traverse failure!\n");
}
else
{
printf("Traverse success!\n");
}
printf("LinkList length:%d \n",LengthLink(LinkList));
ret = ReverseLink(LinkList);
if(SUCCESS == ret)
{
printf("Reverse success!\n");
}
else
{
printf("Reverse failure!\n");
}
ret = TraverseLink(LinkList);
ret = DeleteLink(LinkList,2,&e);
if(SUCCESS == ret)
{
printf("Delete %d success!\n",e);
}
else
{
printf("Delete failure!\n");
}
ret = TraverseLink(LinkList);
ret = LocateLink(LinkList,3);
printf("The element location:%d \n",ret);
ret = ClearLink(LinkList);
if(SUCCESS == ret)
{
printf("Clear the list success!\n");
}
else
{
printf("Clear the list failure!\n");
}
ret = TraverseLink(LinkList);
return 0;
}
/*LinkList.c函数*/
#include <stdio.h>
#include "LinkList.h"
#include <stdlib.h>
int InitLink(LinkList *L)
{
(*L) = (LinkList)malloc(sizeof(Node));
if(NULL == *L)
{
return FAILURE;
}
(*L)->next = NULL;
return SUCCESS;
}
int InsertLink(LinkList L,int pos ,Elemtype e)
{
LinkList p = L;
LinkList q = (LinkList)malloc(sizeof(Node));
if(NULL == q)
{
return FAILURE ;
}
int j = 1;
while(p && j < pos)
{
p = p->next;
j++;
}
while(!p || j > pos)
{
return FAILURE;
}
q->data = e;
q->next = p->next;
p->next = q;
return SUCCESS;
}
int TraverseLink(LinkList L)
{
if(NULL == L)
{
return FAILURE;
}
LinkList p = L->next;
while(p)
{
printf("%d ",p->data);
p = p->next;
}
printf("\n");
return SUCCESS;
}
int LengthLink(LinkList L)
{
int len = 0;
LinkList p = L->next;
while(p)
{
len++;
p = p->next;
}
printf("len :%d\n",len);
return len;
}
int DeleteLink(LinkList L,int pos ,Elemtype *e)
{
LinkList p = L->next;
int j = 1;
while(p && j < pos)
{
p = p->next;
j++;
}
while(!p || j > pos)
{
return FAILURE;
}
LinkList q = p->next;
*e = q->data;
p->next = q->next;
free(q);
return SUCCESS;
}
int LocateLink(LinkList L,Elemtype e)
{
int location = 1;
LinkList p = L->next;
while(p)
{
if(e == p->data)
{
return location;
}
location++;
p = p->next;
}
}
int ClearLink(LinkList L)
{
if(NULL == L)
{
return FAILURE;
}
LinkList p,q;
p = L->next;
while(p)
{
q = p->next;
free(p);
p = q;
}
L->next = NULL;
return SUCCESS;
}
int ReverseLink(LinkList L)
{
LinkList p,q;
if(NULL == L)
{
return FAILURE;
}
p = L->next;
L->next = NULL;
while(p)
{
q = p;
p = p->next;
q->next = L->next;
L->next = q;
}
return SUCCESS;
}