单链表c语言的main函数,单链表的使用 写一个main函数,把单链表的基本操作都用一遍,并把结果输出(文字说明+代码) 并写出输出的...

满意答案

02ae427d08e371d7e90d5b995e828d6d.png

日木子多灾多难

推荐于 2018.04.13

02ae427d08e371d7e90d5b995e828d6d.png

采纳率:40%    等级:7

已帮助:460人

哈哈 碰巧也是返回来学数据结构,让后自己看着书一个一个去实现,下面的代码绝对是我一个代码一个代码打上去得,(你的分就不要啦,给你做个参考吧,结果太多我也就不打啦),带头结点的哦!!ListLink.c文件:

Status initList(LinkList *L){//初始化表

LinkList head;

head=(LinkList)malloc(sizeof(Lnode));

if(NULL==head)

exit(OVERFLOW);

head->next=NULL;

*L=head;

return OK;

}

Status listEmpty(LinkList L){//判断是否为空表

if(NULL==L->next)

return TRUE;

return FALSE;

}

Status listLeng(LinkList L,int *l){//返回表长

LinkList Link;

int i=0;

Link=L->next;

if(Link==NULL){

*l=i;

return OK;

}

while(1){

Link=Link->next;

i++;

if(Link==NULL)

break;

}

*l=i;

return OK;

}

Status ClearList(LinkList *L){//将线性链表L重置为空表,释放原链表结点空间,注意算法

LinkList q,p;

q=p=*L;

if(p->next==NULL)

return OK;

p=q->next;

q->next=NULL;

while(p!=NULL){

q=p;

p=p->next;

free(q);

}

return OK;

}

Status DestroyList(LinkList *L){//销毁一个链表

ClearList(L);

free(*L);

return OK;

}

Status Append(LinkList *L,Lnode *s){//增加一个节点

LinkList link;

link=(*L)->next;

if(link==NULL){

((*L)->next)=s;

return OK;

}

while(NULL!=(link->next)){

link=link->next;

}

(link->next)=s;

return OK;

}

Status PriorPos(LinkList L,ElemType e,LinkList *ln){//返回直接前驱

LinkList link;

link=L->next;

if(link==NULL)

return ERROR;

while(1){

if(e==(link->next->data)){

*ln=link;

return OK;

}

if(link->next==NULL)

return ERROR;

link=link->next;

}

}

Status Remove(LinkList *L,LinkList *q){//删除最后一个节点并返回它

LinkList link;

link=(*L)->next;

if(link==NULL)

return ERROR;

while(link->next->next!=NULL){

link=link->next;

}

*q=link->next;

link->next=NULL;

return OK;

}

Status InsBefore(LinkList *L,LinkList p,Lnode s)//将s结点插入在p所指结点之前,并修改指针p指向新插入的结点

{

LinkList link;

link=*L;

while(link->next){

if(link->next==p){

s.next=p;

*(link->next)=s;

*p=s;

return OK;

}

link=link->next;

}

return ERROR;

}

Status InsAfter(LinkList *L,LinkList p,Lnode s)//将s所指结点插入在p所指结点之后并修改指针p指向新插入的结点

{

LinkList link;

link=*L;

while(link){

if(link->next==p){

if(p->next==NULL){

*(p->next)=s;

*p=s;

return OK;

}

s.next=p->next;

*(p->next)=s;

*p=s;

return OK;

}

link=link->next;

}

return ERROR;

}

Status LocateList(LinkList L,int i,Lnode *p)//用p返回线性链表L中第i个结点的位置

{LinkList link;

int j=1;

link=L;

if(i<1)

return ERROR;

while(1){

link=link->next;

if(j==i){

p=link;

return OK;

}

if(link->next==NULL)

return ERROR;

j++;

}

}

Status LocateElem(LinkList L,ElemType e,int *i)//回线性链表L中第1个data为e的元素的位置

{

int j=1;

LinkList link;

link=L->next;

while(1){

if(link->data==e){

*i=j;

return OK;

}

if(link->next==NULL)

return ERROR;

j++;

}

}

Status ListOut(LinkList L)//输出每个元素

{

LinkList link;

link=L->next;

if(link==NULL){

printf("此为空表.\n");

return 0;

}

while(link!=NULL){

printf("%4d",link->data);

link=link->next;

}

printf("\n");

return OK;

}

宏定义文件和以下引用头文件和结构体定义文件:addhead.h:

#include

#include

#include //注意exit()

#include

#include //INT_MAX等

#define TRUE 1

#define FALSE 0

#define OK 1

#define ERROR 0

#define INFEASIBLE -1

#define OVERFLOW -2

typedef int Status;

typedef int ElemType;

typedef struct node{

ElemType data;

struct node *next;

}Lnode,*LinkList;

最后就是main文件啦:main.c

#include "addhead.h"

#include "LinkList.c"

void main(void){

LinkList L=NULL;

int e_tmp=3;

int i=0;

int num=0;

Lnode *ln[10];

Lnode *lnode;

for(i=0;i<10;i++){

ln[i]=(LinkList)malloc(sizeof(Lnode));

}

if(initList(&L))

printf("初始化L成功!\n");

for(i=0;i<10;i++){

ln[i]->data=i*e_tmp;

ln[i]->next=NULL;

}

for(i=0;i<10;i++){

printf("%4d",ln[i]->data);

}

printf("\n");

printf("将节点添加到L中:\n");

for(i=0;i<10;i++){

Append(&L,ln[i]);

}

ListOut(L);

printf("\n");

if(listLeng(L,&num))

printf("表的长度%d\n",num);

if(PriorPos(L,9,&lnode))

printf("该前驱的数据域%d\n",lnode->data);

ListOut(L);

if(Remove(&L,&lnode))

printf("删除成功,删除的节点数据域%d\n",lnode->data);

ListOut(L);

if(listLeng(L,&num))

printf("表的长度%d\n",num);

if(ClearList(&L))

printf("表清空成功!\n");

if(listLeng(L,&num))

printf("清空后表的长度%d\n",num);

if(DestroyList(&L))

printf("销毁成功!\n");

getchar();

}

50分享举报

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值