鄙人不才,编了第一个,每个功能都由子函数实现,只是程序有些长,呵呵。。
#include<stdio.h>
#include<stdlib.h>
#define SIZE 30
typedef struct Node
{//定义结构体
char data;
Node *next;
}LNode,*Linklist;
Linklist Init()
{//建立一个带头节点的空链表
Linklist L;
L=(Linklist)malloc(sizeof(LNode));
L->next=NULL;
return L;
}
void Insert_first(Linklist L,char a)
{//在表头之后插入节点
Linklist p;
p=(Linklist)malloc(sizeof(LNode));
p->data=a;
p->next=L->next;
L->next=p;
}
void Output(Linklist L)
{// 输出链表
Linklist p;
for(p=L->next;p;p=p->next)
{
printf("%c ",p->data);
}
printf("\n");
}
void FreeL(Linklist L)
{//释放链表
Linklist p,q;
q=L;
p=L->next;
int i=0;
for(;p!=NULL;p=p->next)
{//释放除最后节点以外的所有节点
free(q);
q=p;
printf("已成功删除第%d个节点!\n",i);
i++;
getchar();
}
free(q);//释放最后一个节点
}
void main()
{
Linklist La;
char a[SIZE];
int i,x;
La=Init();
printf("how much chars do you want to input:\n");
scanf("%d",&x);
getchar();
printf("please input the chars:\n");
for(i=0;i<x;i++) //输入数据
scanf("%c",&a[i]);
getchar();
for(i=0;i<x;i++) //把数据存入连表
Insert_first(La,a[i]);
printf("链表中的数据:\n");
Output(La);
printf("正在删除连表:\n");
FreeL(La);
}
运行效果如下:
#include<stdio.h>
#include<stdlib.h>
#define SIZE 30
typedef struct Node
{//定义结构体
char data;
Node *next;
}LNode,*Linklist;
Linklist Init()
{//建立一个带头节点的空链表
Linklist L;
L=(Linklist)malloc(sizeof(LNode));
L->next=NULL;
return L;
}
void Insert_first(Linklist L,char a)
{//在表头之后插入节点
Linklist p;
p=(Linklist)malloc(sizeof(LNode));
p->data=a;
p->next=L->next;
L->next=p;
}
void Output(Linklist L)
{// 输出链表
Linklist p;
for(p=L->next;p;p=p->next)
{
printf("%c ",p->data);
}
printf("\n");
}
void FreeL(Linklist L)
{//释放链表
Linklist p,q;
q=L;
p=L->next;
int i=0;
for(;p!=NULL;p=p->next)
{//释放除最后节点以外的所有节点
free(q);
q=p;
printf("已成功删除第%d个节点!\n",i);
i++;
getchar();
}
free(q);//释放最后一个节点
}
void main()
{
Linklist La;
char a[SIZE];
int i,x;
La=Init();
printf("how much chars do you want to input:\n");
scanf("%d",&x);
getchar();
printf("please input the chars:\n");
for(i=0;i<x;i++) //输入数据
scanf("%c",&a[i]);
getchar();
for(i=0;i<x;i++) //把数据存入连表
Insert_first(La,a[i]);
printf("链表中的数据:\n");
Output(La);
printf("正在删除连表:\n");
FreeL(La);
}
运行效果如下: