编程线性表
‘壹’ 一个线性表的编程
//花了一个晚上和这个中午的时间,终于做好了,可以再VC 6.0里正确运行,基本可以到达你的要求,代码:#include<iostream.h>
typedef int datatype; //线性表结点的数据类型,假设是 int
const int maxsize=100; //线性表可能的最大长度,这里假设是 100;
typedef struct{
datatype data[maxsize+1]; // 定义线性表的数据
int n; //线性表的长度
}sqlist;//建表
sqlist* creat()
{
datatype x;
int i=1;
sqlist *L;
L=new sqlist;
while(cin>>x,x!=0)
{
L->data[i]=x;
i++;
}
L->n=i-1;
L->data[0]=L->n;
return L;
}//插入函数
int insert(sqlist *L,datatype x,int i) { //将 x 插入到顺序表 L得到第 i 个位置
int j;
if(L->n==maxsize) { cout<<"表满,不能插入!(上溢)\n"; return -1; }
if(i<1 || i>L->n+1) {cout<<"非法插入位置!\n"; return 0; }
L->n++;
for(j=L->n;j>i;j--)
L->data[j]=L->data[j-1]; //结点后移
L->data[i]=x;
return 1;
}//删除函数
int deletex(sqlist *L,datatype x) {
if(L->n==0) { cout<<"表空,不能删除!(下溢)\n"; return 0;}
for(int j=1;j<=L->n;j++)
if(L->data[j]==x) //查找衫毁 匹配值 x
for(;j<=L->n;j++)
L->data[j]=L->data[j+1]; //结点前移
L->n--;
return 1;
}
//显示顺序表
void disp(sqlist *L)
{
cout<<"顺序表的表长为 "<<L->n<<"\n 数据:\n";
for(int i=1;i<=L->n;i++)
cout<<"序号: "<<i<<" 数据: "<<L->data[i]<<endl;
}
void main()
{
sqlist *L=NULL;
datatype x;
int ch,i;
XX: while(1)
{
cout<<" 主菜单 \n "
<<" 0.退出\n "
<<" 1.建立顺序表\n "
<<" 2.插入数据\n "
<<" 3.删除数据\n "
<<" 4.显示顺序表\n ";
cin>>ch;
switch(ch)
{
case 0:
delete(L); //退出程序,撤销顺序表
return;
break;
case 1:
cout<<"请输入顺序表的数据(输入 0 退出!)"<<endl;
L=creat();
cout<<"顺序表已建成!\n";
break;
case 2:
cout<<"请输入您要插入的值\n";
cin>>x;
cout<<"插入的位置:\n";
cin>>i;
if( insert(L,x,i)==1 ) cout<<"插入成功!"<<endl;
else cout<<"插入失败! "弊简<<endl;
break;
case 3:
cout<<"请输入您要删除的值\n";
cin>>x;
if(deletex(L,x)==1) cout<<"成功删除数据 "<<x<<endl;
else cout<<"该顺序表没有数据 "<<x<<endl;
break;
case 4:
disp(L);
break;
default:
cout<<"或卜备 输入非法! 请输入 0~4选项!"<<endl;
goto XX;
}
}
}
//如果,还有什么问题,欢迎追问!.^_^.
‘贰’ 几个线性表的问题(c语言编程)《最好教教我算法到底应该怎么写,3Q》
这么多个题才给10分,没多少人愿意帮忙的
‘叁’ C++怎样实现线性表的建立、插入、删除、倒序
{int pivokey=L->data[low];
L->data[0]=L->data[low];
while (low<high)
{
while ((low<high) && (L->data[high]>=pivokey))
high--;
L->data[low]=L->data[high];
while ((low<high) && (L->data[low]<=pivokey))
low++;
L->data[high]=L->data[low];
}
L->data[low]=L->data[0];
return low;
}
void Qsort(SeqList *L, int low, int high)
{
int pivotloc;
if (low<手拆耐high)
{
pivotloc=Partition(L,low,high);
Qsort(L,low,pivotloc-1);
Qsort(L,pivotloc+1,high);
}}
void Merge(SeqList *L, int i, int m, int n)
{
SeqList L1;
int p,q,k;
for (q=m+1;q<=n;q++)
L1.data[q]=L->data[q];
p=m;
q=n;
k=n;
while ((p>=i)&&(q>=m+1))
{
if (L->data[p]>L1.data[q])
{
L->data[k]=L->data[p];
p--;
}
else
{
L->data[k]=L1.data[q];
q--;
}
k--;
}
if (p<i) //尾部处理
for (p=q;p>=m+1;p--)
{
L->data[k]=L1.data[p];
k--;
}}
‘肆’ 用c语言编写程序1.建立一个线性表,输入n个元素并输出2.查找最大元素并输出
线性表 可以使用链表 或者数组实现
以老高动态数组为例
#include<stdio.h>
#include<stdlib.h>
intmain()
{
int*a,n,max,i;
scanf("%d",&n);
a=(int*)malloc(sizeof(int)*n);
for(i=0;i<n;i枯稿++)
scanf("%d",a+i);
for(i=1,max=a[0];i<n;i++)
if(max<a[i])max=a[i];
printf("%d "没含孝,max);
free(a);
return0;
}
‘伍’ C语言程序设计:将线性表的前m个元素和后n个元素互换
#include <stdio.h>
#include <iostream>
#include <iomanip> //格式输出
using namespace std;
#define maxlen 50
struct List
{
int data[maxlen];
int listlen;
}seqlist; //顺序表
int change(int* ptr, int length, int m, int n) //一个辅助空间使前m个元素与后n个元素整体互换,ptr为数组头指针,length为数组长度
{
int i,j;
int temp; //一个辅助空间
int* mark;
if(m+n>length)
return -1;
if(m == n) //前后调换个碧差数相同,中间数据不用移动
{
for(i=0; i<m; i++)
{
temp = *ptr;
*ptr = *(ptr + length - n);
*(ptr + length - n) = temp;
ptr++;
}
}
else if(m > n) //m>n,中间数据整悔简皮体前移
{
for(i=0; i<n; i++)
{
temp = *ptr;
*ptr = *(ptr + length - n);
*(ptr + length - n) = temp;
ptr++;
}
mark = ptr;
for(j=0; j<m-n; j++)
{
temp = *ptr;
for(i=n; i<length-1; i++)
{
*ptr = *(ptr + 1);
ptr++;
}
*ptr = temp;
ptr = mark;
}
}
else //m<n,中间数咐链据整体后移
{
for(i=0; i<m; i++)
{
temp = *ptr;
*ptr = *(ptr + length - n);
*(ptr + length - n) = temp;
ptr++;
}
mark = ptr + length - n;
for(j=0; j<n-m; j++)
{
ptr = mark;
temp = *ptr;
for(i=length-n+m; i>m; i--)
{
*ptr = *(ptr - 1);
ptr--;
}
*ptr = temp;
mark++;
}
}
return 0;
}
int main(int argc, int* argv[])
{
int i;
seqlist.listlen = 0;
for(i=0; i<maxlen; i++)
{
seqlist.data[i] = i;
seqlist.listlen++;
}
if(-1 == change(&seqlist.data[0], seqlist.listlen, 10, 15))
cout << "Error! " << endl; //如果m+n>顺序表实际长度,则认为出错,函数返回-1
for(i=0; i<maxlen; i++)
cout << "[" << setw(2) << i << "] : " << seqlist.data[i] << endl;
return 0;
}
‘陆’ 如何将数据输入到线性表用c++语言
#include"iostream.h"
class num
{
private:
int a[100];
int length;
public:
num()
{
length=0;
}
num(int x[],int len)
{
if(len>100)
{
cout<行桐轿<"data overflow!"<<endl;
num(x,100);
}
else
if(len>=0)
{
for(int i(0);i<len;i++)
a[i]=x[i];
length=len;
}
else
{
cout<<"parameter error!"<<endl;
num();
}
}
void set(int len)
{
if(len>100||len<0)
{
cout<<"parameter error!"<<endl;
}
else
{
for(int i=0;i<len;i++)
cin>>a[i];
length=len;
}
} void print()
{
for(int i=0;i<length;i++)
cout<<a[i]<档肆<' ';
} int find(int flag,int n)//查找,没有找到就显示-1
{
for(int i=n;i<length;i++)
if(a[i]==flag)
break;
if(i==length)
{
return -1;
}
else
return i;
}/* void insert(int flag,int data) //插入,元素定位
{ if(length==100)
cout<<"can't insert more!"<<endl;
else
if(find(flag,0)==-1)
cout<<"not find!"<<endl;
else
{
int f=find(flag,0);
do
{
for(int i=length;i>f;i--)
a[i+1]=a[i];
a[i+1]=data;
f=find(flag,f+2);
length++;
}while(f!=-1);
}
}*/ void delet(int flag)//删除,元素定位
{
if(length==0)
cout<<"can't delete more!"<<endl;
else
if(find(flag,0)==-1)
cout<<"not find!"<<endl;
else
{
int f=find(flag,0);
do
{
for(int i=f;i<length;i++)
a[i]=a[i+1];
f=find(flag,f);
length--;
}while(f!=-1);
}
}
};void main()
{
int n,f;
cout<<"输入数据数"<<轮颂endl;
cin>>n;
num a;
cout<<"输入数据"<<endl;
a.set(n);
cout<<"删除的数据"<<endl;
cin>>f;
a.delet(f);
a.print();
}//主函数简单啦啊,另编吧
‘柒’ 编程题 反转线性表-顺序表 C++做
#include<iostream>
usingnamespacestd;
typedefstructnode{
intdata;
node*next=NULL;
}*Node,*List;
ListgetList(intn){
intcnt=0;
Nodehead=(Node)malloc(sizeof(Node));
head->next=NULL;
Nodetemp,last=head;
while(cnt<n){
temp=(Node)malloc(sizeof(Node));
temp->next=NULL;
temp->data=++cnt;
last->next=temp;
last=temp;
}
returnhead;
}
Listreverse(Listl){
Nodehead=l,temp;
l=l->next;
head->next=NULL;
while(l!=NULL){
temp=head->next;
head->改慧next=l;
l=l->next;
head->next->next=temp;
}
returnhead;
}
voidprint(Listl){
l=l->next;
while(l!=NULL){
if(l->next!=NULL)cout<<l->data<<兆悄"";
elsecout<<l->data;
l=l->next;
}
}
intmain(){
int族歼渣n;
cin>>n;
Listl=getList(n);
l=reverse(l);
print(l);
return0;
}
‘捌’ C语言创建一个线性表,然后输出线性表,如何编写程序
#include<stdio.h>
#include<iostream.h>
#include<stdlib.h>
#defineOVERFLOW -2
#define OK 1
#define ERROR 0
#defineLIST_INIT_SIZE 100
#defineLISTINCREMENT 10
typedef intElemType;
typedef intStatus;
//定义顺序存储结构
typedef struct
{
ElemType *elem;
int length;
int listsize;
}SqList;
//初始化顺序表
StatusInitList_Sq(SqList &L)
{
L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!L.elem ) exit(ERROR);
L.length =0;
L.listsize =LIST_INIT_SIZE;
return OK;
}
//自定义创建顺序表
voidCreate_SqList(SqList &L)
{
int c,i=0;
int *newBase;
printf("请输入顺序表元素:\n");
while((scanf("%d",&c))!=EOF)
{
if(i>=L.listsize) //自定义顺序表大小超过初始化大小
{
newBase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
//为初始顺序表以LISTINCREMENT大小重新增加存储空间
if(!newBase)exit(OVERFLOW);
L.elem=newBase;
L.listsize+=LISTINCREMENT;
}
L.elem[i++]=c;
}
L.length=i;
printf("输入的顺序表元素:\n");
for(i=0;i<L.length;i++)
printf("%d ",L.elem[i]);
printf("\n");
}
//在指定位置插入元素
StatusListInsert(SqList &L,int i,ElemType e)
{
ElemType *p,*q,*newbase;
if(i<1||i>L.length+1)
{
printf("插入位置错误\n");
return(ERROR);
}
if(L.length>=L.listsize)
{
newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
if(!newbase) exit(OVERFLOW);
L.elem=newbase;
L.listsize+=LISTINCREMENT;
}
if(i==L.length) L.elem[i+1]=e;
q=&(L.elem[i-1]);
for(p=&(L.elem[L.length-1]);p>=q;--p)*(p+1)=*p;
*q=e;
++L.length;
return OK;
}
//在指定位置删除元素
StatusListDelete_Sq(SqList &L,int i,ElemType *e)
{
ElemType *p,*q;
if(i<1||i>L.length+1)
return ERROR;
p=&(L.elem[i-1]);
*e=*p;
q=L.elem+L.length-1;
for(++p;p<=q;++p)
*(p-1)=*p;
--L.length ;
return OK;
}
void main()
{
SqList L;
int m,n;
int location,element;
if(!InitList_Sq(L))
{
printf("初始化顺序表失败!\n");
exit(ERROR);
}
Create_SqList(L);
for(m=0;m<3;m++)
{
printf("输入插入位置:");
scanf("%d",&location);
while(location>L.length+1||location<1)
{
printf("输入位置错误,请重新输入!\n");
scanf("%d",&location);
}
printf("插入元素:");
scanf("%d",&element);
if(!ListInsert(L,location,element))
{
printf("顺序表插入失败!\n");
exit(ERROR);
}
printf("插入顺序表为:\n");
for(int i=0;i<=L.length -1;i++)
{
printf("%d ",L.elem[i]);
}
printf("\n新顺序表一共有%d个元素。\n",L.length);
}
for(n=0;n<3;n++)
{
printf("输入删除位置:");
scanf("%d",&location);
while(location>L.length||location<1)
{
printf("输入位置错误,请重新输入!\n");
scanf("%d",&location);
}
if(!ListDelete_Sq(L,location,&element))
{
printf("删除错误!\n");
exit(ERROR);
}
printf("被删除的元素为:%d \n",element);
printf("被删除后的顺序表为:\n");
for(int j=0;j<=L.length-1;j++)
{
printf("%d ",L.elem[j]);
}
printf("\n新顺序表一共有%d个元素。\n",L.length);
}
}
这个是我最近编写的 顺序表也是线性表的
这里还有链表的程序 用的话再传给你
‘玖’ 数据结构 线性表 用c语言
#define MAXSIZE 100 //表中元素的最大个数
typedef int ElemType;//元素类型
typedef struct list{
ElemType elem[MAXSIZE];//静态线性表
int length; //表的实际长度
}SqList;//顺序表的类型名
‘拾’ 数据结构用C++如何写编程,比如编写一个线性表的删除操作
新增加两个结构体,添加一些类型虚悔烂定义和宏定义,前游你这个函数可以不用修改: #define MAX_LENGTH 256 #define ERROR 0 #define OK 1 typedef int Status; typedef struct tagElem { char data1; int data2; ... } ElemType; typedef struct tagSqList { ElemType elem[MAX_LENGTH]; int length; // < MAX_LENGTH } SqList; Status ListDelete_Sq(SqList &L, int i, ElemType &e) { /差漏/ 算法2.5 ...