用单链表实现数据元素是整数的线性表,使其具有如下功能:
(1)初始化一个空表
(2)根据指定个数,逐个输入整数;
(3)根据给定的整数值进行查找,查找成功,返回此整数的在表中的位置,查找不成功,则输出查找失败;
(4)根据指定的位置可返回相应的整数;
(5)给定一个整数,插入到表中指定的位置;
(6)删除指定位置的整数;
(7)统计表中整数个数即求表长。
(8)逐个显示整数表中所有的整数;
下面展示一些 内联代码片。
#include#include #include #define OK 1 //预定义常量及类型 #define ERROR 0 #define OVERFLOW -1 typedef int Status; ; typedef int ElemType; using namespace std; typedef struct LNode { ElemType data;//数据域 struct LNode *next;//指针域 }LNode,*linkList;//*linkList为LNode类型的指针 linkList p,s,q,r; //1.构造一个空的单链表空 int InitList(linkList &L) { L=new LNode; //生成新结点作头结点用头指针L指向头结点 L->next=NULL;//头结点的指针域置空 printf("单链表初始化成功!n"); return OK; } //2.单链表的建立(尾插法) int CreateList(linkList &L,int n) { //正位序输入n个元素的值,建立带表头结点的单链表L L=new LNode; int i; L->next=NULL; r=L; //尾指针r指向头结点 for(i=0;i >p->data; //输入元素值 p->next=NULL; r->next=p; //将新结点*p插入尾结点*r之后 r=p; //r指向新的尾结点 } return OK; }//CreateList_R //3.在线性表L中查找值为e的数据元素 int LocateELem(linkList L,ElemType e) {//返回L中值为e的数据元素的位置序号,查找失败返回0 int j; p=L->next; j=1; while(p &&p->data!=e) //顺链域向后扫描,直到p为空或p所指结点的数据域等于e {p=p->next; j++;} if(p) return j; //p不为空,说明查找e成功,j即为e的序号 else return 0; //p为空,说明查找e失败,返回0 } //4.获取线性表L中的某个数据元素的内容 int GetElem(linkList L,int i) { ElemType e; int j; p=L->next;j=1; //初始化 while(p&&jnext; //p指向下一个结点 ++j; //计数器加1 } if(!p || j>i)return ERROR; // i值不合法,i<1或i>表长+1 e=p->data; //取第i个元素 return e; } //5.在L中第i个元素之前插入数据元素e Status ListInsert(linkList &L,int i,ElemType e){ p=L; int j=0; while(p&&j next; ++j;} //寻找第i?1个结点 if(!p||j>i-1)return ERROR; //i大于表长?+?1或者小于1 s=new LNode; //生成新结点*s s->data=e; //将结点*s的数据域置为e s->next=p->next; //将结点*s插入L中 p->next=s; //将结点*p的指针域指向结点*s return OK; } //6.将线性表L中第i个数据元素删除 Status ListDelete(linkList &L,int i){ int j; p=L;j=0; while(p->next &&j next; ++j; } if(!(p->next)||j>i-1) return ERROR; //删除位置不合理 q=p->next; //临时保存被删结点的地址以备释放 p->next=q->next; //改变删除结点前驱结点的指针域 delete q; //释放删除结点的空间 return OK; } int ListLength(linkList L)//7.求表长 //返回L中数据元素个数 { linkList p; int i; p=L->next; //p指向第一个结点 i=0; while(p){//遍历单链表,统计结点数 i++; p=p->next; } return i; } void ListPrint(linkList L) // 8.显示顺序表L中各元素 { while(L!=NULL){ L = L->next;//下一节点 printf("%5d", L->data);//当前节点 } } void main() { linkList L;//定义一个顺序表L int n,j=1,b,e,i;//要创建的顺序表的长度 int c=0,d=0; printf("n"); while(j) { printf("n"); printf("ntt 线性表子系统 "); printf("ntt************************************************"); printf("ntt* 1------初始化一个空表 *"); printf("ntt* 2------创建单链表,输入各整数值 *"); printf("ntt* 3------查找元素在表中的位置 *"); printf("ntt* 4------由位置查找整数 *"); printf("ntt* 5------插 入 *"); printf("ntt* 6------删 除 *"); printf("ntt* 7------求 表 长 *"); printf("ntt* 8------显 示 *"); printf("ntt* 0------返 回 *"); printf("ntt************************************************"); printf("ntt 请选择菜单号(0--8): "); scanf("%d",&b); switch(b) { case 1: c=InitList(L); break; case 2: if( c==OK){ printf("请输入单链表中整数的个数:"); scanf("%d",&n); d=CreateList(L,n); break; } else {printf("请先进行初始化!"); break;} case 3: if( c==OK){ printf("请输入要查整数:"); scanf("%d",&e); if(LocateELem(L,e)) printf("该数据是第%d个元素n",LocateELem(L,e)); else printf("查找失败,表中无此元素");} else printf("请先进行初始化!"); break; case 4: if( c==OK){ printf("请输入要查的整数的位置:"); scanf("%d",&i); if(GetElem(L,i)) printf("该位置元素的内容是%dn:",GetElem(L,i)); else printf("查找失败,表中无此元素!n");} else printf("请先进行初始化!"); break; case 5: if( c==OK){ printf("请输入要在第几个位置插入数据和数据的值"); printf("n输入格式:插入位置,整数(中间用逗号隔开)n"); scanf("%d,%d",&i,&e); if(ListInsert(L,i,e )) printf("插入成功!n");} else printf("请先进行初始化!"); break; case 6: if( c==OK){ printf("请输入要删除的位置:"); scanf("%d",&i); ListDelete(L,i);} else printf("请先进行初始化"); break; case 7: if( c!=OK) printf("ntt 请先进行初始化! "); else printf("该单链表的表长为:%dn",ListLength(L)); break; case 8: if( c!=OK) printf(" 请先进行初始化! "); else ListPrint(L); break; case 0: j=0; break; default: printf(" 输入错误! 请重新输入!"); } } }
这个代码写了好长时间~~~啊啊啊,感觉可以的话点个赞哈,嘿嘿!



