链表的读取、插入、删除操作以及整表创建
代码实现
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
typedef struct Node
{
int data;
struct Node *next;
}Node;
typedef struct Node *LinkList; /*¶¨ÒåLinkList*/
/*读取单链表的第i个元素*/
int GetElem(LinkList L,int i,int *e)
{
int j=1;
LinkList p;
p=L->next;
while(p&&j<i)
{
p=p->next;
j++;
}
if(!p||j>i)
return 0;
*e=p->data;
return 1;
}
/*单链表的结点插入操作*/
int ListInsert(LinkList *L,int i,int e)
{
LinkList p,s;
p=*L;
s=NULL;
int j=1;
while(j<i)
{
p=p->next;
j++;
}
if(!p||j>i)
return 0;
s=(LinkList)malloc(sizeof(Node));
s->next=p->next;
p->next=s;
s->data=e;
return 1;
}
/*单链表的结点删除操作*/
int ListDelete(LinkList *L,int i,int *e)
{
LinkList p,q;
p=*L;
int j=1;
while(p->next&&j<i)
{
p=p->next;
j++;
}
if(!(p->next)||j>i)
return 0;
*e=q->data;
q=p->next;
p->next=q->next;
free(q);
return 1;
}
/*整表的创建(头插法)*/
void CreateLinkListHead(LinkList *L,int n)
{
int i;
LinkList p;
srand(time(0));
*L=( LinkList )malloc(sizeof(Node));
(*L)->next=NULL;
for(i=0;i<n;i++)
{
p=(LinkList)malloc(sizeof(Node));
p->data=rand()%100+1;
p->next=(*L)->next;
(*L)->next=p;
}
}
/*整表的创建(尾插法)*/
void CreateLinkListTail(LinkList *L,int n)
{
LinkList p,r;
int i;
(*L)=(LinkList)malloc(sizeof(Node));
r=*L;
for(i=0;i<n;i++)
{
p=(LinkList)malloc(sizeof(Node));
p->data=rand()%100+1;
r->next=p;
r=p;
}
r->next=NULL;
}
int main()
{
return 0;
}
具体应用
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
typedef struct Node
{
int data;
struct Node *next;
}Node;
typedef struct Node *LinkList; /*¶¨ÒåLinkList*/
void CreateLinkListTail(LinkList *L,int n)
{
LinkList p,r;
int i;
(*L)=(LinkList)malloc(sizeof(Node));
r=*L;
for(i=0;i<n;i++)
{
p=(LinkList)malloc(sizeof(Node));
p->data=rand()%100+1;
r->next=p;
r=p;
}
r->next=NULL;
}
int main()
{
LinkList L;
int n;
scanf("%d",&n);
CreateLinkListTail(&L,n);
LinkList p;
p=L;
for(int i=0;i<n;i++)
{
p=p->next;
printf("%d ",p->data);
}
}