c语言编写句子链表,C语言 建立链表(链表的结点类型与成员个数等由学生自己定义)...

满意答案

02ae427d08e371d7e90d5b995e828d6d.png

pmphk

2014.07.02

02ae427d08e371d7e90d5b995e828d6d.png

采纳率:55%    等级:7

已帮助:2159人

#include"stdio.h"

#include"string.h"

#include"stdlib.h"

#include"malloc.h"

#include"conio.h"

/*定义DataType为int类型*/

typedef int DataType;

#define TRUE 1

#define FALSE 0

/*单链表的结点类型*/

typedef struct LNode

{DataType data; struct LNode *next; }LNode,*LinkedList;

/*初始化单链表*/

LinkedList LinkedListInit()

{LinkedList L; L=(LinkedList)malloc(sizeof(LNode)); L->next=NULL; printf("初始化单链表成功\n"); return L; }

/*清空单链表*/

void LinkedListClear(LinkedList &L)

{L->next=NULL; printf("链表已经清空\n"); }

/*检查单链表是否为空*/

int LinkedListEmpty(LinkedList &L)

{if(L->next==NULL) {printf("单链表为空\n"); return TRUE;}

else

{printf("单链表非空\n");return FALSE;}

}

/*遍历单链表*/

void LinkedListTraverse(LinkedList &L)

{LinkedList p; p=L->next; if(p==NULL) printf("单链表为空表\n"); else {printf("链表中的元素为:\n"); while(p!=NULL) {printf("%d ",p->data); p=p->next;}

}

printf("\n");

}

/*求单链表长度*/

int LinkedListLength(LinkedList &L)

{LinkedList p; int j; p=L->next; j=0; while(p!=NULL) { j++; p=p->next;}

return j;

}

/*从链表中查找元素*/

LinkedList LinkedListGet(LinkedList &L,int i)

{LinkedList p; p=L->next;int j=1; while(p&&jnext; j++;}

if(p) printf("位序为%d的元素的值为%d\n",i,p->data);

else printf("查询位置不正确\n");

}

/*从链表中查找与给定元素值相同的元素在顺序表中的位置*/

int LinkedListLocate(LinkedList &L,DataType x)

{LinkedList p;int i=1; p=L->next; while(p && p->data != x) {p=p->next;i++;}

if(p) {printf("所查找的元素%d在表中的位置为%d\n",x,i);return i; }

else {printf("所查找的元素%d不存在\n",x);return 0; }

}

/*向链表中插入元素*/

void LinkedListInsert(LinkedList &L, int i, DataType x)

{LinkedList p,s; int j=0; p=L; while(p&&jnext;j++;}

if(!p||j>i) printf("插入位置不正确\n");

else

{s=(LNode *)malloc(sizeof(LNode)); s->data=x; s->next=p->next; p->next=s; printf("在表中第%d个节点后插入%d成功\n",i,x); }

}

/*从链表中删除元素*/

void LinkedListDel(LinkedList &L,int i)

{ LinkedList p,q;

int j=0;

p=L;

while(p->next&&jnext;j++;}

if(p->next==NULL)

printf("删除位置不正确\n");

else

{q=p->next;p->next=q->next;free(q); printf("第%d个元素已从链表中删除\n",i); }

}

/*最后改好的将头插发改为尾插法了*/

LinkedList LinkedListCreat(LinkedList&L,int n) /*建立单链表*/

{ int i;

DataType x;

LinkedList p;

L=(LinkedList)malloc(sizeof(LNode));

L->next=NULL;

for(i=n;i>0;--i)

{p=(LinkedList)malloc(sizeof(LNode)); printf("请依次输入链表中的元素:"); scanf("%d",&x); p->data=x; p->next=L->next;L->next=p; }

printf("输入完毕\n");

return L;

}

main()

{printf("请用数字键选择操作\n\n"); printf("1.初始化\n"); printf("2.建立单链表\n"); printf("3.清空\n"); printf("4.求链表长度\n"); printf("5.检查链表是否为空\n"); printf("6.遍历链表\n"); printf("7.从链表中查找元素\n"); printf("8.从链表中查找与给定元素值相同的元素在顺序表中的位置\n"); printf("9.向链表中插入元素\n"); printf("0.从链表中删除元素\n\n"); printf("按其他键退出\n"); LinkedList L;int i,x,n,quit=0;while(!quit)switch(getch()) {case '1':L=LinkedListInit(); break;case '2':printf("请输入需要的链表的长度为:");scanf("%d",&n);L=LinkedListCreat(L,n); break; case '3':LinkedListClear(L);break; case '4':printf("链表的长度为 %d(不含头节点)\n",LinkedListLength(L)); break; case '5':LinkedListEmpty(L); break; case '6':LinkedListTraverse(L); break; case '7':printf("请输入待查询元素在链表中的位置:");scanf("%d",&i);LinkedListGet(L,i); break; case '8':printf("请输入待查询元素的值:"); scanf("%d",&x); LinkedListLocate(L,x); break; case '9':printf("请输入插入元素的位置和值(中间用逗号隔开):\n"); scanf("%d,%d",&i,&x); LinkedListInsert(L,i,x); break; case '0':if(LinkedListEmpty(L)==1) printf("链表已经为空,不能删除\n"); else printf("请输入待删除元素的位置:\n"); scanf("%d",&i); LinkedListDel(L,i); break; default:quit=1; }

}

00分享举报

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值