#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#include<stdio.h>
#include<stdlib.h>
/*
线性链表的实现
ADT 线性表(List)
Data
Operation
CreatList(*L); 初始化操作,建立一个空的线性链表L。
ListEmpty(L); 若线性链表L为空,返回true, 否则返回false。
ClearList(*L); 将线性表L清空
GetElem(L, i, e); 将线性表L中的第i个元素值返回给e。
LocatElem(L,e); 在线性表L中查找与给定值e相等的元素,如果查找成功, 返回该元素在表中位置表示成功;否则返回0表示失败。
InsertList(*L, i, e); 在线性L表的第i个位置插入e。
DelList(*L, i, *e); 删除线性表L中的第i个元素,并用e返回其值。
ListLength(L); 返回线性表L的长度。
Print(L); 打印线性表L的全部元素。
*/
typedef struct Node //链表数据结构
{
int data;
struct Node *next;
}Node, *LinkList;
int CreatList(LinkList *L, int n)
{
LinkList p, r;
int i;
*L = (LinkList)malloc(sizeof(Node) );
r = *L;
for(i=0; i<n; i++)
{
p = (Node *)malloc(sizeof(Node));
p->data = i;
r->next = p;
r = p;
}
r->next = NULL;
}
int ListEmpty(LinkList L)
{
LinkList p;
int count;
p = L->next;
while(p)
count ++;
if(count>0) return TRUE;
else return FALSE;
}
int ClearList(LinkList *L)
{
LinkList p, q;
p = (*L)->next;
while(p)
{
q = p->next;
free(p);
p = q;
}
(*L)->next = NULL;
return OK;
}
int InsertNode(LinkList *L, int i, int e)
{
LinkList p;
Node *s;
p = *L;
int j = 1;
while(p && j<i)
{
p = p->next;
++j;
}
if(!p || j>i)
return ERROR;
s = (Node *)malloc(sizeof(Node));
s->data = e;
s->next = p->next;
p->next = s;
return OK;
}
int GetElem(LinkList L, int i)
{
LinkList p;
p = L->next;
int j = 1;
int m;
while(p && j<i)
{
p = p->next;
++j;
}
if(!p || j>i)
return ERROR;
m = p->data;
printf("%d", m);
return OK;
}
int DelNode(LinkList *L, int i, int *e)
{
LinkList p, r;
p = *L;
int j = 1;
while(p->next && j<i)
{
p = p->next;
++j;
}
if(!(p->next) || j>i)
return ERROR;
r = p->next;
p->next = r->next;
*e = r->data;
free(r);
return OK;
}
int Print(LinkList L)
{
LinkList p;
p = L->next;
int m, i;
while(p)
{
m = p->data;
printf("%d ", m);
p = p->next;
}
}
int LocateElem(LinkList L, int e, int *count)
{
LinkList p;
p = L;
while(p)
{
p = p->next;
(*count) ++;
if(p->data == e)
return TRUE;
}
return FALSE;
}
int ListLength(LinkList L, int *count)
{
LinkList p;
p = L;
while(p)
{
p = p->next;
(*count) ++;
}
return OK;
}
int main()
{
int e;
int location=0;
int length=0;
LinkList L;
CreatList(&L, 10);
Print(L);
printf("\n");
InsertNode(&L, 3, 100);
Print(L);
printf("\n");
GetElem(L, 3);
printf("\n");
DelNode(&L, 9, &e);
Print(L);
printf("\n");
printf("%d\n", e);
LocateElem(L, 100, &location);
printf("%d\n", location);
ListLength(L, &length);
printf("%d\n", length);
}
C语言线性表的实现
最新推荐文章于 2023-06-12 20:31:59 发布