满意答案
pmphk
2014.07.02
采纳率: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分享举报