typedef int ElemType; //使用typedef和define是一种很好的新馆
typedef int Status;
#define ERR_OK 0
#define ERR_NO 1
typedef struct Node{
ElemType data;//数据域
struct Node* next; //指针域
}Node;
typedef struct Node* LinkList;
//获取指定项的数据
Status GetElem(LinkList L,int index,ElemType *e)
{
int j;
LinkList p; //声明节点
p=L->next; //首先指向有效的数据节点
j=1;
//循环查找index的位置
while( p!=NULL && j<index)
{
p=p->next;
j++;
}
//判断当前节点的值是否是有效的值
if(p == NULL ||j>index)
{
return ERR_NO;
}
//获取节点的值
*e = p->data;
return ERR_OK;
}
//链表的插入
Status ListInsert(LinkList *L,int i,ElemType e)
{
int j;
LinkList p,s;
p=*L;
j=1;
while(p && j<i)
{
p=p->next;
j++;
}
if(!p && j>i)
{
return ERR_NO;
}
s= (LinkList)malloc(sizeof(Node)); //生成新节点
s->data = e;
s->next=p->next;//后继给后继
p->next=s; //上一个节点的next指向插入点
return ERR_OK;
}
//创建链表,头插法
void CreateListHead(LinkList* L,int n)
{
LinkList p;
int i;
srand(time(0));
*L = (LinkList)malloc(sizeof(Node));
(*L)->data = 0;
(*L)->next = NULL; //头节点的单链表
for(i=0;i<n;i++)
{
p=(LinkList)malloc(sizeof(Node));//生成新节点
p->data = rand()%100+1; //随机生成100以内的数字
p->next = (*L)->next; //之前
(*L)->next = p;
}
}
//创建线性表,尾插法
void CreateListTail(LinkList* L,int n)
{
LinkList p,r;
int i;
srand(time(0));
*L = (LinkList)malloc(sizeof(Node));
(*L) ->data=0;
(*L)->next = NULL; //头节点的单链表
r=*L; //尾节点指针初始化指向头节点
for(i=0;i<n;i++)
{
p=(LinkList)malloc(sizeof(Node));//生成新节点
p->data = rand()%100+1; //随机生成100以内的数字
r->next=p;
r = p;
}
r->next = NULL;
}
void main(void) //测试没有写标准的main函数写法
{
LinkList linklist;
CreateListTail(&linklist,5);
ListInsert(&linklist,3,2);
getchar();
}
vs中的结果