c语言线性表
① 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语言中的线性表是指什么啊
线性就是数据是一维的意思而已。线性表一般分静态和动态两种,静态的就是数组,动态的就是单链表而已。
③ C语言——线性表
#include"stdio.h"
#include<malloc.h>
typedef char ElemType;
typedef struct LNode
{ElemType data;
struct LNode *next;
}LinkList;
void CreatListF(LinkList *&L,ElemType a[],int n) //头插法建表
{
LinkList *s;int i;
L=(LinkList *)malloc(sizeof(LinkList));
L->next=NULL;
for(i=0;i<n;i++)
{
s=(LinkList *)malloc(sizeof(LinkList));
s->data=a[i];
s->next=L->next;
L->next=s;
}
}
void CreateListR(LinkList *&L,ElemType a[],int n) //尾插法建表
{
LinkList *s,*r;int i;
L=(LinkList *)malloc(sizeof(LinkList));
r=L;
for(i=0;i<n;i++)
{
s=(LinkList *)malloc(sizeof(LinkList));
s->data=a[i];
r->next=s;
r=s;
}
r->next=NULL;
}
void InitList(LinkList *&L) //初始化线性表
{
L=(LinkList *)malloc(sizeof(LinkList));
L->next=NULL;
}
void DestroyList(LinkList *&L) //销毁线性表
{
LinkList *p=L,*q=p->next;
while(q!=NULL)
{
free(p);
p=q;
q=p->next;
}
free(p);
}
int ListEmpty(LinkList *L) //判断线性表是否为空
{
return(L->next==NULL);
}
int ListLength(LinkList *L) //求线性表的长度
{
LinkList *p=L;int n=0;
while(p->next!=NULL)
{
n++;p=p->next;
}
return(n);
}
void DispList(LinkList *L) //输出线性表
{
LinkList *p=L->next;
while(p!=NULL)
{
printf("%c",p->data);
p=p->next;
}
}
int GetElem(LinkList *L,int i,ElemType &e) //求线性表中某个数据元素值
{
int j=0;
LinkList *p=L;
while(j<i&&p!=NULL)
{
j++;p=p->next;
}
if(p==NULL)
return 0;
else
{
e=p->data;return 1;
}
}
int LocateElem(LinkList *L,ElemType e) //按元素值查找
{
LinkList *p=L->next;
int i=1;
while(p!=NULL&&p->data!=e)
{
p=p->next;i++;
}
if(p==NULL)return(0);
else return(i);
}
int ListInsert(LinkList *&L,int i,ElemType e) //插入数据元素
{
int j=0;
LinkList *p=L,*s;
while(j<i-1&&p!=NULL)
{
j++;p=p->next;
}
if(p==NULL)return 0;
else
{
s=(LinkList *)malloc(sizeof(LinkList));
s->data=e; s->next=p->next; p->next=s;
return 1;
}
}
int ListDelete(LinkList *&L,int i,ElemType &e) //删除数据元素
{
int j=0;
LinkList *p=L,*q;
while(j<i-1&&p!=NULL)
{
j++;p=p->next;
}
if(p==NULL)
return 0;
else
{
q=p->next;
if(q==NULL)return 0;
e=q->data;
p->next=q->next;
free(q);
return 1;
}
}
int main()
{
ElemType e,a[5]={'a','b','c','d','e'};
LinkList *h;
InitList(h); //初始化顺序表h
CreateListR(h,&a[0],5); //依次采用尾插入法插入a,b,c,d,e元素
printf("单链表为:");
DispList(h); printf("\n"); //输出顺序表h
printf("该单链表的长度为:");
printf("%d",ListLength(h)); printf("\n"); //输出顺序表h的长度
if(ListEmpty(h)) printf("该单链表为空。\n");
else printf("该单链表不为空。\n"); //判断顺序表h是否为空
GetElem(h,3,e);printf("该单链表的第3个元素为:");
printf("%c",e); printf("\n"); //输出顺序表h的第3个元素
printf("该单链表中a的位置为:");
printf("%d",LocateElem(h,'a')); printf("\n"); //输出元素'a'的位置
ListInsert(h,4,'f'); //在第4个元素位置插入'f'素
printf("在第4 个元素位置上插入'f'后单链表为:");
DispList(h); printf("\n"); //输出顺序表h
ListDelete(h,3,e); //删除L的第3个元素
printf("删除第3个元素后单链表为:");
DispList(h); printf("\n"); //输出顺序表h
DestroyList(h); //释放顺序表h
return 0;
}
④ C语言文字线性表
#include <stdio.h>
#include<Windows.h>
int *pi;
int m=15;
struct node{
int data;
struct node *next;
};
void Get_data(void)
{
while(m>0)
{
scanf("%d",pi);getchar();
if(*pi<0)return;
pi++;
}
}
void Print_slist(struct node *h)
{
struct node *p;
p=h->next;
if(p=='\0')
{
printf("Linklist is null!\n");
}
else
{
// printf("heead");
while(p!='\0')
{
printf("%d\t",p->data);
p=p->next;
}
printf("end\n");
}
}
void Delete_node(struct node *h,int x)
{
struct node *p,*q;
q=h;p=h->next;
if(p!='\0')
{
while((p!='\0')&&(p->data!=x))
{
q=p;p=p->next;
}
if(p->data==x)
{
q->next=p->next;free(p);
}
}
}
void Insert_node(struct node *h,int x,int y)
{
struct node *s,*p,*q;
s=(struct node *)malloc(sizeof(struct node));
s->data=y;
q=h;
p=h->next;
while((p!='\0') && (p->data!=x))
{
q=p;p=p->next;
}
q->next=s;s->next=p;
}
void main()
{
int x;
struct node *phead,*s,*r;
phead=(struct node*)malloc(sizeof(struct node));
r=phead;
scanf("%d",&x);
while(x>=0 && m>0)
{
s=(struct node*)malloc(sizeof(struct node));
s->data=x;
r->next=s;
scanf("%d",&x);
m--;
}
r->next='\0';
Print_slist(s);
}
⑤ 怎样创建线性表(C语言)
线性表是个抽象的概念,没办法直接创建抽象类型,需要具体的类型(比如数组,链表)。
比如创建数组:int array[100];
创建一个GList链表: GList * list = NULL; (空的)
⑥ c语言&数据结构&线性表
编译通过了,全是低级错误,逻辑问题没有检查,自己再看看吧
#include<stdio.h>
#include<stdlib.h>
#defineMAXSIZE100
typedefstruct
{
intdata[MAXSIZE];//-<-------
intlength;
}SeqList;//<------------
typedefSeqList*PSeqList;
PSeqListInit_SeqList(void)
{/*创建一顺序表,入口参数无,返回一个指向顺序表的指针,指针值为零表示分配空间失败*/
PSeqListSeqListPoint;
SeqListPoint=(PSeqList)malloc(sizeof(SeqList));
if(SeqListPoint==NULL)/*若SeqListPoint=NULL表示分配失败*/
returnNULL;
else
SeqListPoint->length=0;
return(SeqListPoint);
}
voidDestroy_SeqList(PSeqListSeqListPoint)
{
if(SeqListPoint)
free(SeqListPoint);
//SeqListPoint=NULL;
return;
}//-<---------
intLocation_SeqList(PSeqListSeqListPoint,intx)
{/*顺序表检索,入口参数:为顺序表指针,检索元素,
返回元素位置,-1表示表不存在,0表示查找失败*/
inti=0;
if(!SeqListPoint)
{
printf("表不存在");//-<----------
return(-1);/*表不存在,不能检索*/
}
while(i<SeqListPoint->length&&SeqListPoint->data[i]!=x)
i++;
if(i>=SeqListPoint->length)return0;
else
return(i+1);
}
intDelete_SeqList(PSeqListSeqListPoint,inti)//-<-------
{/*顺序表删除,入口参数:顺序表指针,删除元素位置,返回标志1表示成功,0表示删除位置不合法,-1表示表不存在*/
intj;
if(!SeqListPoint)
{
printf("表不存在");//-<----------
return(-1);/*表不存在,不能删除元素*/
}
if(i<1||i>SeqListPoint->length)/*检查删除位置的合法性*/
{
printf("删除位置不合法");//-<----------
return(0);
}
for(j=i;j<SeqListPoint->length;j++)
SeqListPoint->data[j-1]=SeqListPoint->data[j];/*向上移动*/
SeqListPoint->length--;
return(1);/*删除成功*/
}
intLength_SeqList(PSeqListSeqListPoint)
{/*求顺序表的长度,入口参数:为顺序表指针,返回表长,-1表示表不存在*/
if(SeqListPoint)
return(SeqListPoint->length);
return(-1);
}
intmain()
{
PSeqListSeqListPoint;
SeqListPoint=Init_SeqList();
inti=0,n,m;
while(i<MAXSIZE)
{
SeqListPoint->data[i]=i+1;//-<------
i++;
}
printf("请输入要删除的元素:");//-<--------
scanf("%d",&n);
printf("删除前的元素为:");
n=Length_SeqList(SeqListPoint);
for(i=0;i<n;i++)
printf("%d",SeqListPoint->data[i]);//-<-----
printf(" ");
m=Location_SeqList(SeqListPoint,n);
Delete_SeqList(SeqListPoint,m);
printf(" ");
printf("删除后的元素为:");
for(i=0;i<n;i++)
printf("%d",SeqListPoint->data[i]);//-<-----
printf(" ");
Destroy_SeqList(SeqListPoint);
return0;//
}
⑦ C语言中怎么定义个线性表
1、定义结构体类型,这里需要利用指针和结构体,其中m和n分别表示矩阵的行和列。
⑧ C语言线性表
#include<stdio.h>
#include<stdlib.h>
typedef struct aaa{
int a;
struct aaa *next;}*uuu;
struct aaa * ccc(uuu l);
void ddd(uuu l);
int main()
{
int m;
uuu l;
l=NULL;
do{
printf("1_____插入一个元素:\n2_____输出全部元素:\n0_____退出.\n");
scanf("%d",&m);
switch(m)
{case 1:l=ccc(l);break;
case 2:ddd(l);break;
case 0:break;
default:printf("输入错误,请重新输入:\n");}
}while(m!=0);
return 0;
}
struct aaa * ccc(uuu l)
{
struct aaa *p;
printf("输入要插入的数:\n");
p=(uuu)malloc(sizeof(struct aaa));
scanf("%d",&p->a);
p->next=l;
return p;
}
void ddd(uuu l)
{
struct aaa *p;
p=l;
while(p!=NULL)
{
printf("%d\t",p->a);
p=p->next;
}
}
⑨ 谁会用C语言编写线性表
/*
1.输入2.修改3.查找4.删除。
*/
#include"stdio.h"
#include<malloc.h>
typedefcharElemType;
typedefstructLNode
{ElemTypedata;
structLNode*next;
}LinkList;
voidCreatListF(LinkList*&L,ElemTypea[],intn)//头插法建表
{
LinkList*s;inti;
L=(LinkList*)malloc(sizeof(LinkList));
L->next=NULL;
for(i=0;i<n;i++)
{
s=(LinkList*)malloc(sizeof(LinkList));
s->data=a[i];
s->next=L->next;
L->next=s;
}
}
voidCreateListR(LinkList*&L,ElemTypea[],intn)//尾插法建表
{
LinkList*s,*r;inti;
L=(LinkList*)malloc(sizeof(LinkList));
r=L;
for(i=0;i<n;i++)
{
s=(LinkList*)malloc(sizeof(LinkList));
s->data=a[i];
r->next=s;
r=s;
}
r->next=NULL;
}
voidInitList(LinkList*&L)//初始化线性表
{
L=(LinkList*)malloc(sizeof(LinkList));
L->next=NULL;
}
voidDestroyList(LinkList*&L)//销毁线性表
{
LinkList*p=L,*q=p->next;
while(q!=NULL)
{
free(p);
p=q;
q=p->next;
}
free(p);
}
intListEmpty(LinkList*L)//判断线性表是否为空
{
return(L->next==NULL);
}
intListLength(LinkList*L)//求线性表的长度
{
LinkList*p=L;intn=0;
while(p->next!=NULL)
{
n++;p=p->next;
}
return(n);
}
voidDispList(LinkList*L)//输出线性表
{
LinkList*p=L->next;
while(p!=NULL)
{
printf("%c",p->data);
p=p->next;
}
}
intGetElem(LinkList*L,inti,ElemType&e)//求线性表中某个数据元素值
{
intj=0;
LinkList*p=L;
while(j<i&&p!=NULL)
{
j++;p=p->next;
}
if(p==NULL)
return0;
else
{
e=p->data;return1;
}
}
intLocateElem(LinkList*L,ElemTypee)//按元素值查找
{
LinkList*p=L->next;
inti=1;
while(p!=NULL&&p->data!=e)
{
p=p->next;i++;
}
if(p==NULL)return(0);
elsereturn(i);
}
intListInsert(LinkList*&L,inti,ElemTypee)//插入数据元素
{
intj=0;
LinkList*p=L,*s;
while(j<i-1&&p!=NULL)
{
j++;p=p->next;
}
if(p==NULL)return0;
else
{
s=(LinkList*)malloc(sizeof(LinkList));
s->data=e;s->next=p->next;p->next=s;
return1;
}
}
intListDelete(LinkList*&L,inti,ElemType&e)//删除数据元素
{
intj=0;
LinkList*p=L,*q;
while(j<i-1&&p!=NULL)
{
j++;p=p->next;
}
if(p==NULL)
return0;
else
{
q=p->next;
if(q==NULL)return0;
e=q->data;
p->next=q->next;
free(q);
return1;
}
}
intmain()
{
ElemTypee,a[5]={'a','b','c','d','e'};
LinkList*h;
InitList(h);//初始化顺序表h
CreateListR(h,&a[0],5);//依次采用尾插入法插入a,b,c,d,e元素
printf("单链表为:");
DispList(h);printf(" ");//输出顺序表h
printf("该单链表的长度为:");
printf("%d",ListLength(h));printf(" ");//输出顺序表h的长度
if(ListEmpty(h))printf("该单链表为空。 ");
elseprintf("该单链表不为空。 ")
;//判断顺序表h是否为空
GetElem(h,3,e);printf("该单链表的第3个元素为:");
printf("%c",e);printf(" ");//输出顺序表h的第3个元素
printf("该单链表中a的位置为:");
printf("%d",LocateElem(h,'a'));printf(" ");//输出元素'a'的位置
ListInsert(h,4,'f');//在第4个元素位置插入'f'素
printf("在第4个元素位置上插入'f'后单链表为:");
DispList(h);printf(" ");//输出顺序表h
ListDelete(h,3,e);//删除L的第3个元素
printf("删除第3个元素后单链表为:");
DispList(h);printf(" ");//输出顺序表h
DestroyList(h);//释放顺序表h
return0;
}
⑩ C语言创建一个线性表,然后输出线性表
#include <stdio.h>
#include <stdlib.h>
typedef struct _NodeList
{
int m_data;
_NodeList* m_next;
}NodeList;
NodeList * createList()
{
NodeList *head,*temp,*tail;
head=tail=NULL;
for (int i = 0; i < 10; i++)
{
temp=(NodeList *)malloc(sizeof(NodeList));
scanf("%d",&temp->m_data);
temp->m_next = NULL;
if(head==NULL)
{
head = tail = temp;
}
else
{
tail->m_next = temp;
tail = temp;
}
}
return head;
}
void printList(NodeList *list)
{
NodeList * tmp = list;
printf("The list is :\n");
while (tmp->m_next != NULL)
{
printf("%d--",tmp->m_data);
tmp = tmp->m_next;
}
printf("%d\n",tmp->m_data);
}
int main()
{
printf("Please input 10 numbers:\n");
/* create list */
NodeList * list = createList();
/* print list */
printList(list);
return 0;
}