C++问题 急!急!急
求代码~~用C++方法实现链表线性表的建立插入删除和逆转操作,并用函数验证并上机实现!
答案:#include<iostream.h>
#include<iomanip.h>
#include<malloc.h>
#include<stdlib.h>
//函数状态常量定义
#define OK 1
#define ERROR 0
//数据类型重定义
typedef int Status;
typedef int ElemType;
//线性表顺序结构节点
typedef struct LNode{
ElemType data; //数据
struct LNode *next; //关系
}LNode,*LinkList;
//操作的实现:
//线性表的创建操作CreatList_L
//创建一个线性表,并将其长度初始化为n,该创建过程采用逆序输入方式
void CreatList_L(LinkList &L,int n)
{
LinkList p;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
for(int i=n;i>0;--i)
{
p=(LinkList)malloc(sizeof(LNode));
cout<<"\n请输入线性表的第"<<i<<"个元素:";
cin>>p->data;
p->next=L->next;
L->next=p;
}
}
//线性表输出操作PrintList_L
//输出方式为顺序输出,输出前提是线性表存在
void Print_L(LinkList L)
{
int i=0;
cout<<"输出线性表的如下:"<<endl;
for(LinkList p=L->next;p;p=p->next)
{
cout<<setw(5)<<p->data;
i++;
if(!(i%10)) cout<<endl;
}
cout<<endl;
}
//插入操作InitList_L
//在线性表的第i个位置出入一个节点,插入位置i要求在1<= i <=线性表的长度+1
//若插入位置不合法 返回ERROR,插入成功返回OK
Status InserList_L(LinkList &L,int i,ElemType e)
{
int j=0;
LinkList p=L,q;
while(p && j<i-1)
{
p=p->next;
j++;
}
if(!p || j>i-1) return ERROR;
q=(LinkList)malloc(sizeof(LNode));
q->data=e;
q->next=p->next;
p->next=q;
return OK;
}
//删除操作DeletList_L
//删除线性表中第i个位置的元素,位置i的范围为:1<=i<=线性表的长度
//如果删除成功返回OK.否着返回ERROR
Status DeletList_L(LinkList &L,int i,ElemType &e)
{
int j=0;
LinkList p=L;
while(p->next && j<i-1)
{
p=p->next;
j++;
}
if(!p->next||j>i-1) return ERROR;
LinkList q=p->next;
p->next=q->next;
e=q->data;
free(q);
return OK;
}
//取元素操作GetElem_L
//取出线性表中给定位置的元素
//若给定位置输入有误,则返回ERROR,否则返回OK
Status GetElem_L(LinkList L,int i,ElemType &e)
{
int j=0;
LinkList p=L;
while(p && j<i)
{
p=p->next ;
j++;
}
if(!p || j>i) return ERROR;
e=p->data;
return OK;
}
//归并操作MergeList_L
//将两个线性表合并成一个表
//前提先线性表元素非递减排列
void MergeList_L(LinkList &L1,LinkList &L2,LinkList &L3)
{
LinkList p=L1->next,q=L2->next,r=L3=L1;
while(p&&q)
{
if(p->data<=q->data)
{
r->next=p;
r=p;
p=p->next;
}
else
{
r->next=q;
r=q;
q=q->next;
}
}
if(r->next==p) r->next=q;
else
r->next=p;
free(L2);
}
void main()
{
LinkList L,L1,L2;
ElemType e;
int in,in1;
while(1)
{
cout<<"**********************************链表的实现***********************************"<<endl;
cout<<" <<ElemType为int型>> "<<endl;
cout<<"--创建操作--\n--初始化L1--\n请输入线性表的长度为:";
cin>>in1;
CreatList_L(L,in1); //创建线性表L
Print_L(L);
cout<<"--请选择操作--\n删除[1]插入[2]取元素[3]归并[4]\n"<<endl;//选择操作
cout<<"--请选择--"<<endl;
cin>>in;
switch(in)
{
case 1:cout<<"--删除操作--\n请输入你要删除的元素的位置:"; //删除操作
cin>>in;
if(!DeletList_L(L,in,e))
{
cout<<"\n你输入的数据不合法!"<<endl;
break;
}
Print_L(L);
break;
case 2:cout<<"--插入操作--\n请输入你要插入的元素的位置:";//插入操作
cin>>in;
cout<<"\n请输入你要插入的元素:";
cin>>e;
if(!InserList_L(L,in,e))
{
cout<<"\n你输入的位置有误!"<<endl;
break;
}
Print_L(L);
break;
case 3:cout<<"请输入你所取的元素的位置:";//取元素操作
cin>>in;
if(!GetElem_L(L,in,e))
{
cout<<"\n你输入的位置有误!"<<endl;
break;
}
cout<<"第"<<in<<"个位置的元素为:"<<e<<endl;
break;
case 4:cout<<"--初始化L2--\n请输入你要初始化的线性表L1的长度为:";//归并操作
cin>>in;
CreatList_L(L1,in);
cout<<"--归并前--"<<endl;
Print_L(L);
Print_L(L1);
MergeList_L(L,L1,L2);
cout<<"--归并后--"<<endl;
Print_L(L2);break;
default:cout<<"你的选择有误!请重新开始!"<<endl;
}
system("cls");
}
}#include "stdio.h"#include "stdlib.h"#include "malloc.h"typedef char DataType; typedef struct queuenode { DataType data; struct queuenode * next; }QueueNode;typedef struct { QueueNode * front;//队头指针 QueueNode * rear; file://队尾指针}LinkQueue;void InitQueue(LinkQueue * q){ q->front=q->rear=NULL;}int QueueEmpty(LinkQueue * q){ return q->front==NULL && q->rear==NULL;}file://队列只在头删除,尾插入,所以不用判断队列是否满void EnQueue(LinkQueue * q,DataType x){ QueueNode * p=(QueueNode *)malloc(sizeof(QueueNode)); p->data=x; p->next=NULL; if (QueueEmpty(q)) q->front=q->rear=p; file://对空直接插入 else { q->rear->next=p; q->rear=p; }}DataType DeQueue(LinkQueue * q){ DataType x; if (QueueEmpty(q)) { printf("Queue is empty, can’t dequeue..."); exit(-1); } QueueNode * p=q->front; file://指向对头 x=p->data; q->front=p->next; file://q->front->next; if (q->rear==p) file://只有一个节点,则队空 q->rear=NULL; free(p); return x;}void Disp(LinkQueue * s){ QueueNode * p=s->front; printf("====================================n"); while (p!=NULL) { printf("%cn",p->data); p=p->next; } printf("=====================================nn");}void main(){ printf("================ 先进先出[FIFO]的链队列 DEMO =============nn"); LinkQueue * s=(LinkQueue *)malloc(sizeof(LinkQueue)); InitQueue(s); EnQueue(s,’1’); EnQueue(s,’2’); EnQueue(s,’3’); EnQueue(s,’4’); EnQueue(s,’5’); EnQueue(s,’6’); printf("1,2,3,4,5,6 入队后队列中的数据序列为:n"); Disp(s); printf("第一个出队数据:%cnn",DeQueue(s)); printf("第二个出队数据:%cnn",DeQueue(s));}呵呵,我只会c语言哎,如果你需要的话,我可以帮你编的。
上一个:C++问题:读不懂代码...
下一个:C++与Jave到底哪一个好?