回复 2楼 林月儿
这是我自己写的:还没有写完。我觉得应该有个show
#includestdio.h
#includestdlib.h
#includemalloc.h
typedef struct node
{
int data;结点中的成员
struct node next;指针
}lnode,linklist;
单链表的初始化
linklist chushilist()
{
node l;
l=(node )malloc(sizeof(node));
if(l=NULL)
printf(申请内存空间失败n);
l-next=NULL;
return l;
}
单链表的建立(头插法)
linklist toulist()
{
int i;
node l;
l=(node )malloc(sizeof(node));分配空间
l-next=NULL;
int x;
while(scanf(%d,&x)!=EOF)
{
for(i=100;i0;i--)
{
node p;
p=(node )malloc(sizeof(node));
p-data=x;
p-next=l-next;
l-next=p;
}
}
return l;
}
单链表的插入(尾插法)
linklist weilist()
{
node l;
l=(node )malloc(sizeof(node));
l-next=NULL;初始化一个空表
node r;
r=l;r始终指向终端的结点,开始时指向头结点
int x;
while(scanf(%d,&x)!=EOF)
{
for(int i=100;i0;i--)
{
node p;
p=(node )malloc(sizeof(node));
p-data=x;结点的数值域赋值
r-next=p;
r=p;
}
}
r-next=NULL;
return l;
}
单链表的删除,在链表中删除能被三整除的元素
linklist deletelist(linklist l,int x)
{
node p,pre;
p=l-next;
while(p-data!=(x%3==0))
{
pre=p;
p=p-next;
}
pre-next=p-next;
free(p);
return l;
}
int main()
{
linklist list,start;
printf(请输入单链表的数据:);
list=toulist();
for(start=list-next;start!=NULL;start=start-next)
printf(%d,start-data);
printf(n);
printf(删除的单链表:);
}
下面这个是查的,但是改不对。
#include<stdio.h>
#include<malloc.h>
typedef char ElemType;
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LinkNode;
//w尾插法建立单链表
void CreateListR(LinkNode *&L, ElemType a[], int n)
{
LinkNode *s,*r;
L=(LinkNode *)malloc(sizeof(LinkNode));//创立头节点
L->next=NULL;
r=L;
for(int i=0;i<n;i++)
{
s=(LinkNode *)malloc(sizeof(LinkNode));//创立新的结点
s->data=a[i];
r->next=s;//将节点s插入r结点之后
r=s;
}
r->next=NULL;//尾结点next置空
}
//初始化线性表
void InitList(LinkNode *&L)
{
L=(LinkNode *)malloc(sizeof(LinkNode));//创建头节点
L->next=NULL;//将单链表置空
}
//插入
bool ListInsert(LinkNode *&L, int i, ElemType e)
{
int j = 0;
LinkNode *p = L, *s; //p指向头节点,j置为0(即头节点序号为0)
if(i <= 0) //i错误返回假
return false;
while(j < i - 1 && p != NULL){ //查找第i-1个节点p
j++;
p = p->next;
}
if(p == NULL)
return false;
else{
//将节点s插入
s = (LinkNode *)malloc(sizeof(LinkNode));
s->data = e;
s->next = p->next;
p->next = s;
return true;
}
}
//输出线性表
void DispList(LinkNode *L)
{
LinkNode *p=L->next;
while(p!=NULL)
{
printf("%c",p->data);
p=p->next;
}
printf("\n");
}
//删除能被3整除的元素
bool ListDelete(LinkNode *&L,int i,ElemType &e)
{
int j=0;
LinkNode *p=L,*q;
if(i<=0)
return false;
while(j%3==0&&p!=NULL)
{
j++;
p=p->next;
}
if(p==NULL)
return false;
else{
q=p->next;
if(p==NULL)
return false;
e=q->data;
p->next=q->next;
free(q);
return true;
}
}
//销毁线性表
void DestroyList(LinkNode *&L)
{
LinkNode *pre = L, *p = pre->next;
while(p != NULL)
{
free(pre);
pre = p; //pre、p同步后移一个节点
p = pre->next;
}
free(pre); //此时p为NULL、pre指向尾节点,释放它
}
int main()
{
LinkNode *h;
ElemType e;
printf("初始化单链表");
InitList(h);
printf("依次采用尾插法插入元素");
ListInsert(h,1,'a');
printf(" (3)输出单链表h:");
DispList(h);
printf(" (10)删除h的第3个元素\n");
ListDelete(h,3,e);
printf(" (11)输出单链表h:");
DispList(h);
printf(" (12)释放单链表h\n");
DestroyList(h);
return 1;
}