版权声明:如需转载请博客下面留言,并在转载时请标明出处,并附带链接! https://blog.csdn.net/patrick_star_cowboy/article/details/80005332
头文件部分
using namespace std;
#define MAX_SIZE 20
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef struct Node
{
ElemType data;
struct Node *next;
}Node;
typedef struct Node *LinkList;
Status ClearList(LinkList *L);
void CreateListTail(LinkList *L, int n);
void CreateListHead(LinkList *L, int n);
Status DeleteList(LinkList *L, int i, ElemType *e);
Status InsertList(LinkList *L, int i, ElemType e);
Status GetElem(LinkList L, int i, ElemType *e);
函数实现部分
//取得值
Status GetElem(SqList l, int i, ElemType *e)
{
if ((l.length == 0) || (i < 1) || (i > l.length))
{
return ERROR;
}
*e = l.data[i - 1];
return TRUE;
}
//插入数据
Status ListInsert(SqList *L, int i, ElemType e)
{
int m;
if (L->length >= MAX_SIZE)
{
return ERROR;
}
if (i < 1 || i > L->length + 1)
{
return ERROR;
}
if (i <= L->length)
{
for (m = L->length - 1; m >= i - 1; m--)
{
L->data[m + 1] = L->data[m];
}
}
L->data[i - 1] = e;
L->length++;
return OK;
}
//删除
Status DeleteList(SqList *L, int i, ElemType *e)
{
int m;
if ((L->length == 0) || (i < 1) || (i > L->length))
{
return ERROR;
}
*e = L->data[i - 1];
if (i < L->length)
{
for (m = i - 1; m < L->length - 1; m++)
{
L->data[m] = L->data[m + 1];
}
}
L->length--;
return OK;
}
Status GetElem(LinkList L, int i, ElemType *e)
{
int j;
LinkList p;
p = L->next;
j = 1;
while (p && j < i)
{
p = p->next;
j++;
}
if (!p || j > i)
return ERROR;
*e = p->data;
return OK;
}
Status InsertList(LinkList *L, int i, ElemType e)
{
int m = 1;
LinkList p, s;
p = (*L)->next;
while (p && m < i)
{
p = p->next;
m++;
}
if (m > i || !p)
{
return ERROR;
}
s = (LinkList)malloc(sizeof(Node));
s->data = e;
s->next = p->next;
p->next = s;
return OK;
}
Status DeleteList(LinkList *L, int i, ElemType *e)
{
LinkList s, p;
int m = 1;
p = (*L)->next;
while (p && m < i - 1)
{
m++;
p = p->next;
}
if (!p || m > i - 1)
{
return ERROR;
}
s = p->next;
*e = p->next->data;
p->next = s->next;
free(s);
return OK;
}
void CreateListHead(LinkList *L, int n)
{
int i = n;
(*L) = new Node;
(*L)->data = 0;
(*L)->next = NULL;
srand(time(0));
while (n--)
{
LinkList p = new Node;
(p)->data = 666;
(p)->next = (*L)->next;
(*L)->next = (p);
}
}
void CreateListTail(LinkList *L, int n)
{
int i = n;
*L = new Node;
(*L)->data = 0;
(*L)->next = NULL;
LinkList r;
r = *L;
while (i--)
{
LinkList p = new Node;
(p)->data = 666;
r->next = p;
r = p;
}
r->next = NULL;
}
Status ClearList(LinkList *L)
{
LinkList r, p;
r = (*L)->next;
while (r)
{
p = r->next;
free(r);
r = p;
}
(*L)->next = NULL;
return OK;
}
main()函数部分
int main(int argc, char** argv)
{
LinkList *s = new LinkList;
CreateListHead(s, 2);
int m = 10;
for (int i = 0; i < 5; i++)
{
InsertList(s, m++, i);
}
ClearList(s);
system("pause");
return 0;
}
单链表的增删改查,头插尾插都在这里了,希望对你有帮助