链表
#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
typedef struct Node
{
int data;
struct Node *next;
}*LinkList;
//初始化线性表
int InitList(LinkList *L)
{
*L=(LinkList)malloc(sizeof(Node));
(*L)->next=NULL;
return OK;
}
//返回L中数据个数
int ListLength(LinkList L)
{
int i=0;
LinkList p=L->next;
while(p)
{
i++;
p=p->next;
}
return i;
}
//在L中第i个位置之前插入新的元素e,长度加一
int ListInsert(LinkList *L,int i,int e)
{
int j=1;
LinkList p,s;
p=*L;
while(p&&j<i)//寻找第i-1个节点
{
p=p->next;
++j;
}
if(!p||j>i)
return ERROR;
s=(LinkList)malloc(sizeof(Node));
s->data=e;
s->next=p->next;
p->next=s;
return OK;
}
//输出L的元素
int ListPrint(LinkList L)
{
LinkList p=L->next;
while(p)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
return OK;
}
int main()
{
LinkList L;
InitList(&L);
printf("初始化L后长度:%d\n",ListLength(L));
for(int i=1;i<=5;i++)
ListInsert(&L,1,i);
printf("在L的表头依次插入1~5后:");
ListPrint(L);
printf("插入1~5后L的长度:%d\n",ListLength(L));
return 0;
}
初始化L后长度:0
在L的表头依次插入1~5后:5 4 3 2 1
插入1~5后L的长度:5
单链表的删除:
int ListDelete(LinkList *L,int i,int *e)
{
int j=1;
LinkList p,q;
p=*L;
while(p->next&&j<i)
{
p=p->next;
++j;
}
if(!(p->next)||j>i)
return ERROR;
q=p->next;
p->next=q-next;
*e=q->data;
free(q);
return OK;
}