链表
一、链表的创建
typedef struct node
{
int data;
char name[20];
struct node *next;
}LNode;
1、尾插法(无返回值)(有头)
void CreateList(LNode *H, int n)
{
LNode *p, *r;
int x,i;
r=H;
for(i=0;i<n;i++)
{
p=(LNode *)malloc(sizeof(LNode));
scanf("%d", &p->data);
scanf("%s",p->name);
p->next=NULL;
r->next=p;
r=p;
}
}
2、尾插法(返回值为链表头)(无头)
LNode *createList(int n)
{
LNode *H=NULL,*p,*r;
int i,x;
for(i=1;i<=n;i++)
{
p=(LNode *)malloc(sizeof(LNode));
scanf("%d", &p->data);
scanf("%s",p->name);
p->next=NULL;
if(i==1)
H=p;
else
r->next=p;
r=p;
}
return H;
}
3、链表输出(无头)
void printList(LNode *h)
{
LNode *p;
p=h;
while(p!=NULL)
{
printf("%d %s\n",p->data,p->name);
p=p->next;
}
}
4、链表输出(有头)
void PrintList(LNode *h)
{
LNode *p;
p=h->next;
while(p!=NULL)
{
printf("%d\n",p->data);
p=p->next;
}
}
5、链表节点查找
LNode *findList(LNode *h,int num)
{
LNode *p;
p=h;
while(p!=NULL&&p->data!=num)
{
p=p->next;
}
if(p!=NULL)
return p;
else
return NULL;
}
6、链表节点删除
void delList(LNode *H,int num)
{
LNode *b,*r;
b=H;
r=H->next;
if(r!=NULL)
{
while(r!=NULL&&r->data!=num)
{
b=r;
r=r->next;
}
if(r!=NULL)
{
b->next=r->next;
free(r);
}
else
printf("找不到\n");
}
}
7、链表节点插入
void insList(LNode *h,LNode *q)
{
LNode *p,*b;
p=h->next;
b=h;
if(p!=NULL)
{
while(p!=NULL&&p->data<q->data)
{
b=p;
p=p->next;
}
if(p!=NULL)
{
q->next=p;
b->next=q;
}
else
b->next=q;
}
else
b->next=q;
}
老师的代码
#include <stdio.h>
#include <stdlib.h>
#define LEN sizeof(LNode)
typedef struct node
{
int data;
char name[20];
struct node *next;
}LNode;
void CreateList(LNode *H, int n)
{
LNode *p, *r;
int x,i;
r=H;
for(i=0;i<n;i++)
{
scanf("%d", &x);
p=(LNode *)malloc(sizeof(LNode));
p->data=x;
scanf("%s",p->name);
p->next=NULL;
r->next=p;
r=p;
}
}
void PrintList(LNode *h)
{
LNode *p;
p=h->next;
while(p!=NULL)
{
printf("%d\n",p->data);
p=p->next;
}
}
void Printfile(LNode *h)
{
LNode *p;
FILE *fp;
fp=fopen("c:\\data.txt","w");
p=h->next;
while(p!=NULL)
{
fprintf(fp,"%d %s\n",p->data,p->name);
p=p->next;
}
fclose(fp);
}
void printList(LNode *h)
{
LNode *p;
p=h;
while(p!=NULL)
{
printf("%d %s\n",p->data,p->name);
p=p->next;
}
}
LNode *createList(int n)
{
LNode *H=NULL,*p,*r;
int i,x;
for(i=1;i<=n;i++)
{
scanf("%d", &x);
p=(LNode *)malloc(sizeof(LNode));
p->data=x;
scanf("%s",p->name);
p->next=NULL;
if(i==1)
H=p;
else
r->next=p;
r=p;
}
return H;
}
LNode *findList(LNode *h,int num)
{
LNode *p;
p=h;
while(p!=NULL&&p->data!=num)
{
p=p->next;
}
if(p!=NULL)
return p;
else
return NULL ;
}
void delList(LNode *h,int num)
{
LNode *b,*p;
b=h;
p=h->next;
if(p!=NULL)
{
while(p!=NULL&&p->data!=num)
{
b=p;
p=p->next;
}
if(p!=NULL)
{
b->next=p->next;
free(p);
}
else
printf("找不到\n");
}
}
void insList(LNode *h,LNode *q)
{
LNode *p,*b;
p=h->next;
b=h;
if(p!=NULL)
{
while(p!=NULL&&p->data<q->data)
{
b=p;
p=p->next;
}
if(p!=NULL)
{
q->next=p;
b->next=q;
}
else
b->next=q;
}
else
b->next=q;
}
int main()
{
LNode *Head,*zp,*q;
int n,num;
while(scanf("%d", &n)!=EOF)
{
Head=(LNode *)malloc(sizeof(LNode));
printf("%p\n",Head);
Head->next=NULL;
CreateList(Head, n);
Printfile(Head);
}
return 0;
}