0
点赞
收藏
分享

微信扫一扫

循环链表(头指针)

//循环链表的使用(头指针)
#include <stdio.h>
#include <stdlib.h>

#define OK 1
#define TRUE 1
#define ERROR 0
#define FALSE 0

typedef struct elem {
int n;
}elem;//可取合适的元素

typedef struct splist {
elem data;
splist* nest;
}splist,*list;//链表

//建立并初始化链表
int InitList(list &L) {
L =(list) malloc(sizeof(splist));
L->nest = L;
L->data.n = 0; //把每个元素都赋0
return OK;
}

//建立链表并添加元素
int CreateList(list &L) {
InitList(L);
printf("请输入你要输入元素的个数:");
list p,ps=L;//p用来为新结点开辟新的空间,ps指向L的最后一个的地址
int n = 0;
scanf("%d", &n);//存要放入结点的个数
for (int j = 0; j < n; j++) {
int m = 0;
scanf("%d", &m);
p = (list)malloc(sizeof(splist));
p->data.n = m;
p->nest = ps->nest;
ps->nest = p;
ps = p;
}
return OK;
}

//加入一个元素
int AddList(list &L,int i,int n) { //i为要插入的位置,n为要插入的元素
list p, k = L;
if (i <= 0) return ERROR;
for (int j = 1; j <=i - 1; j++) {
k = k->nest;
if (k == L) return ERROR;//判断有没有到最后一个
}
p = (list)malloc(sizeof(splist));//开辟新结点
p->data.n = n;
p->nest = k->nest;
k->nest = p;
return OK;
}

//删除结点
int DeleteList(list &L, int i) {
if (i <= 0) return ERROR;
list ps, k = L;//ps用来存放第i结点的地址,k用来存放第i-1个结点的地址
for (int j = 1; j <= i - 1; j++) {
k = k->nest;
if (k->nest == L) return ERROR;
}
ps = k->nest;
k->nest = k->nest->nest;
free(ps);
return OK;
}

//求出链表的长度,返回元素个数
int LengthList(list &L) {
int length = 0;
list k = L->nest;
while (k != L) {
length++;
k = k->nest;
}
return length;
}

//判断链表是否为空
int EmptyList(list &L) {
if (L->nest == L) return TRUE;
return FALSE;
}
//将链表的第i个结点的元素存到e中
int SearchList(list &L, int i, elem* e) {
if (i <= 0) return ERROR;
list k = L;
for (int j = 1; j <= i ; j++) {
k = k->nest;
if (k == L) return ERROR;
}
e->n = k->data.n;
return OK;
}

//清空链表
int ClearList(list &L) {
list ps,k=L->nest;
while (k != L) {
ps = k;
L->nest = k->nest;
k = k->nest;
free(ps);
}
return OK;
}

//销毁链表
int DestoryList(list &L) {
list ps, k = L->nest;
while (k != L) {
ps = k;
L->nest = k->nest;
k = k->nest;
free(ps);
}
free(L);
return OK;
}

//将b链表连接在a的后面,直接在a上做改变
int ContactList(list &a, list &b) {
if (EmptyList(b)) return ERROR;
list ps_a=a->nest, ps_b=b->nest;
while (ps_a->nest != a) {
ps_a = ps_a->nest;
}
while (ps_b->nest != b) {
ps_b = ps_b->nest;
}
ps_a->nest = b->nest;
ps_b->nest = a;
free(b);
return OK;
}


int main()
{
//list a,b;
//CreateList(a);
//CreateList(b);
//ContactList(a, b);
//int j = EmptyList(L);
//DestoryList(L);
//ClearList(L);
//AddList(L, 6, 6);
//DeleteList(L, 7);
//int l = LengthList(L);
//elem n;
//elem* e = &n;
//SearchList(L, 6, e);
return 0;
}
举报

相关推荐

0 条评论