1、头文件:linklist.h
#include <stdio.h>
typedef struct Node
{
int data;
struct Node *next;
}Node; //定义链表结构
typedef struct LINKLIST
{
int length;
Node header;
}LINKLIST; //操控链表
void InitList(LINKLIST*); //初始化链表
int ListEmpty(LINKLIST*); //判断链表是否为空
int ListLength(LINKLIST*); //返回链表长度
void GetElem(LINKLIST*, int, int *); //获取指定位置的元素(pos从0开始)
void ListInsert(LINKLIST*, int, int); //在指定位置中插入新元素
void ListDel(LINKLIST*, int, int *); //删除指定位置的元素
void ClearList(LINKLIST*); //清空链表
void DestroyList(LINKLIST*); //销毁链表
2、操作链表文件:linklist.c
#include <stdio.h>
#include <stdlib.h>
#include "linklist.h"
void InitList(LINKLIST* L)
{
L->length = 0;
L->header.next = NULL;
}
int ListEmpty(LINKLIST* L)
{
if(L->length == 0)
return 1;
return 0;
}
int ListLength(LINKLIST* L)
{
return L->length;
}
void GetElem(LINKLIST *L, int pos, int *e)
{
if(pos < 0 || pos >= L->length)
return;
if(L->length == 0)
return;
Node *pCur = &L->header;
int i = 0;
for(i=0;i<pos+1;i++)
{
pCur = pCur->next;
}
*e = pCur->data;
}
void ListInsert(LINKLIST *L, int pos, int e)
{
if(pos < 0 || pos > L->length)
return;
Node* pCur = &L->header;
int i = 0;
for(i = 0; i < pos; i++)
{
pCur = pCur->next;
}
Node* pNew = (Node*)malloc(sizeof(Node));
pNew->data = e;
pNew->next = pCur->next;
pCur->next = pNew;
L->length++;
}
void ListDel(LINKLIST* L, int pos, int *e)
{
if(pos < 0 || pos >= L->length)
return;
if(L->length == 0)
return;
Node* pCur = &L->header;
int i = 0;
for(i=0;i<pos;i++)
{
pCur = pCur->next;
}
Node* pDel = pCur->next;
*e = pDel->data;
pCur->next = pDel->next;
free(pDel);
L->length--;
}
void ClearList(LINKLIST *L)
{
while(ListEmpty(L) != 1)
{
int tmp;
ListDel(L, 0, &tmp);
}
}
void DestroyList(LINKLIST *L)
{
ClearList(L);
}
3、测试主函数:main.c
#include <stdio.h>
#include <stdlib.h>
#include "linklist.h"
int main()
{
LINKLIST ls;
//链表初始化
InitList(&ls);
int i = 0;
for(i=0;i<10;i++)
{
ListInsert(&ls, i, i+3);
}
for(i=0;i<10;i++)
{
int tmp = 0;
GetElem(&ls, i, &tmp);
printf("The num_%d element is: %d\n", i, tmp);
}
while(ListEmpty(&ls) != 1)
{
int tmp;
ListDel(&ls, 0, &tmp);
printf("The delete element is: %d\n", tmp);
}
DestroyList(&ls);
system("Pause");
return 0;
}
注意:上述三个文件在同一个工程下
网友评论