当前位置:首页 » 编程语言 » c语言顺序表

c语言顺序表

发布时间: 2022-01-10 10:44:22

c语言编写顺序表

给你改了下,可以正常输入和输出。

initlist_Sq read 函数中
if(!l.elem) printf("Error!");
l是指针 所以要改为 l->elem

l.length++; 改 l->length++;
void insert(sqlist *l,int k)中

SqList l是大写
l-?elem[i]=t;改 l->elem[i]

main 中
Sqlist l; SqList l;

更改后如何下可以运行
#include "stdio.h"
#include "stdlib.h"
#define LIST_INIT_SIZE 100
#define LIST_INCREMENT 10
typedef int ElemType;
typedef struct{
ElemType *elem;
int length;
int listsize;
}SqList;
void initlist_Sq(SqList *l){
l->elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!l->elem) printf("Error!");
l->length=0;
l->listsize=LIST_INIT_SIZE;
}
void read(SqList *l){
int i;
for(i=0;i<10;i++){
scanf("%d",&l->elem[i]);
l->length++;
}
}
void write(SqList *l){
int i;
for(i=0;i<l->length;i++)
printf("%d\t",l->elem[i]);
}
void insert(SqList *l,int k){
int i,t;
l->elem[0]=k;
for(i=0;i<l->length;i++)
if(l->elem[i]>l->elem[i+1]){
t=l->elem[i+1];
l->elem[i+1]=l->elem[i];
l->elem[i]=t;
}
l->length++;
}
int main(){
int x;
SqList l;
initlist_Sq(&l);
read(&l);
printf("Input the number you want to insert:\n");
scanf("%d",&x);
printf("The ordinary list is:\n");
write(&l);
printf("\nThe new list is:");
write(&l);
system("pause");
return(0);
}

② c语言实现顺序表

--顺序表.h
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define TRUE 1
#define FLASE 0
typedef int Elemtype;
typedef int Status;

/*接口定义
Status InitList_Sq(SqList &L,int size,int inc);
void CreateList_Sq(SqList &L);
void print_Sq(SqList &L);
int Search_Sq(SqList L, Elemtype e);
Status DestroyList_Sq(SqList &L);
Status ClearList_Sq(SqList &L);
Status ListEmpty_Sq(SqList L);
int ListLength_Sq(SqList L);
Status GetElem_Sq(SqList L, int i, Elemtype &e);
Status PutElem_Sq(SqList &L, int i, Elemtype e);
Status Append_Sq(SqList &L, Elemtype e);
Status DeleteLast_Sq(SqList &L, Elemtype &e);
*/
--------------------
#include "顺序表.h"

//定义顺序表类型
typedef struct {
Elemtype *elem;
int length;
int listsize;
int increment;
}SqList;

//初始化顺序表
Status InitList_Sq(SqList &L,int size,int inc) {

L.elem = (Elemtype *)malloc(size * sizeof(Elemtype));
L.length = 0;
L.listsize = size;
L.increment = inc;
return TRUE;
}

//创建顺序表
Status CreateList_Sq(SqList &L) {
int i;
printf("请输入你要创建的顺序表元素个数:\n");
scanf_s("%d", &L.length);
if (L.length >= L.listsize) {
L.elem = (Elemtype *)realloc(L.elem, (L.listsize + L.increment) * sizeof(Elemtype));
}
if (!L.elem) {
return FLASE;
}
printf("请输入你要创建的顺序表:\n");
for (i = 0; i<L.length; i++) {
scanf_s("%d", &L.elem[i]);
}
}

//遍历顺序表
void print_Sq(SqList &L) {
int i;
for (i = 0; i<L.length; i++) {
printf("%4d", L.elem[i]);
}
}

//查找元素的位置
int Search_Sq(SqList L, Elemtype e) {
int i = 0;
while (L.elem[i] != e&&i<L.length) {
i++;
}
if (i>L.length)
return -1;
else
return i + 1;//因为C语言是从下标为0开始的,当i=0时表示第一个元素
}

//销毁顺序表
Status DestroyList_Sq(SqList &L) {
if (L.elem == NULL)
return -1;
else
free(L.elem);
printf("\n销毁成功\n");
return TRUE;
}

//清空顺序表
Status ClearList_Sq(SqList &L) {
if (L.elem == NULL)
exit(0);
int i;
Elemtype *p_elem = L.elem;
for (i = 0; i<L.length; i++) {
*L.elem = NULL;
L.elem++;
}
L.elem = p_elem;
}

//判断顺序表是否为空
Status ListEmpty_Sq(SqList L) {
int i;
Elemtype* p_elem = L.elem;
for (i = 0; i<L.length; i++) {
if (*L.elem != 0) {
L.elem = p_elem;
return FLASE;
}
L.elem++;
}
return TRUE;
}

//求顺序表的长度
int ListLength_Sq(SqList L) {
return L.length;
}

//用e返回顺序表L中第i个元素的值
Status GetElem_Sq(SqList L, int i, Elemtype &e) {
int j;
Elemtype* p_elem = L.elem;
if (i<1 || i>L.length)
return FLASE;
for (j = 1; j <= i; j++)
L.elem++;
e = *L.elem;
L.elem = p_elem;
return TRUE;
}

//将顺序表L中第i个元素赋值为e
Status PutElem_Sq(SqList &L, int i, Elemtype e) {
L.elem[i - 1] = e;
return TRUE;
}

//在顺序表L表尾添加元素e
Status Append_Sq(SqList &L, Elemtype e) {

L.elem[L.length] = e;
L.length++;
L.listsize += L.increment;
return TRUE;
}

//删除顺序表L表尾元素
Status DeleteLast_Sq(SqList &L, Elemtype &e) {
e = L.elem[L.length - 1];
L.length--;
return TRUE;
}

********************************************主函数.c*************************************************

#include <stdio.h>
#include <stdlib.h>
#include "顺序表.h"
#include "源代码.h"

//--------------------主函数入口--------------------

int main(){
SqList L;
int size, inc;
int e;
int a;
int length;
int i;
int temp;
int j=10;
int ee;
printf("\n--------------------顺序表初始化------------------\n");
printf("请输入顺序表的长度size以及扩容量:\n");
scanf_s("%d %d", &size, &inc);
InitList_Sq(L, size, inc);
CreateList_Sq(L);

printf("\n--------------------判断是否为空------------------\n");

if(ListEmpty_Sq(L)){
printf("该顺序表为空\n");
}
else
printf("该顺序表不为空\n");

printf("\n--------------------遍历顺序表--------------------\n");

printf("此时顺序表为:\n");
print_Sq(L);

printf("\n--------------------查找元素----------------------\n");

printf("\n请输入要查找的元素:\n");
scanf_s("%d",&e);
a = Search_Sq(L, e);
printf("%d为第%d位:\n",e,a);

printf("\n--------------------输出长度----------------------\n");

length = ListLength_Sq(L);
printf("顺序表的长度为%d\n",length);

printf("\n----------将顺序表L中第i个元素赋值为temp----------\n");

printf("请输入第i个元素的i值和temp值:\n");
scanf_s("%d %d",&i,&temp);
PutElem_Sq(L, i, temp);
printf("\n此时顺序表为:\n");
print_Sq(L);

printf("\n---------------在顺序表表尾添加元素---------------\n");

Append_Sq(L, j);
printf("\n此时顺序表为:\n");
print_Sq(L);

printf("\n---------------在顺序表表尾删除元素---------------\n");

DeleteLast_Sq(L, ee);
printf("\n被删除的元素为%d\n",ee);
printf("此时顺序表为:\n");
print_Sq(L);

printf("\n-------------------清空顺序表---------------------\n");

ClearList_Sq(L);
if(ListEmpty_Sq(L)){
printf("\n清空成功\n");
}

printf("\n------------------销毁顺序表----------------------\n");

DestroyList_Sq(L);
getchar();
getchar();
return 0;
}

③ C语言顺序表的基本操作

#include<stdio.h>
#include<stdlib.h>

typedefintDataType;//定义数据数据类型

typedefstruct{
DataType*data;//data指向数据区的首个数据
intlength;//数据长度
}SqList;

voidSort(SqList*L){
inti,j,k;
DataTypetmp;
for(i=0;i<L->length-1;++i){
k=i;
for(j=i+1;j<L->length;++j)
if(L->data[k]>L->data[j])
k=j;
if(k!=i){
tmp=L->data[k];
L->data[k]=L->data[i];
L->data[i]=tmp;
}
}
}

SqList*CreateList(DataTypea[],intn){
inti;
SqList*L;
L=(SqList*)malloc(sizeof(SqList));
L->data=(DataType*)malloc(n*sizeof(DataType));
L->length=n;
for(i=0;i<n;++i)L->data[i]=a[i];
Sort(L);
returnL;
}

intInsertList(SqList*L,DataTypex){
inti,j;
for(i=0;i<L->length;i++){
if(x<=L->data[i]){
for(j=L->length;j>=i;j--)
L->data[j+1]=L->data[j];//结点后移
L->data[i]=x;
L->length++;
return1;
}
}
L->data[L->length++]=x;
return1;
}

intRemoveListElem(SqList*L,DataTyped){
inti,j;
for(i=0;i<L->length;++i){
if(L->data[i]==d){
for(j=i;j<L->length-1;++j)
L->data[j]=L->data[j+1];
L->length--;
return1;
}
}
return0;
}

SqList*AndList(SqList*A,SqList*B){/*A∩B*/
inti,j,k=0;
intlen=(A->length>B->length)?B->length:A->length;
SqList*C=(SqList*)malloc(sizeof(SqList));
C->length=len;
C->data=(DataType*)malloc(len*sizeof(DataType));
for(i=0;i<A->length;++i){
for(j=0;j<B->length;++j){
if(A->data[i]==B->data[j]){
C->data[k++]=A->data[i];
break;
}
}
}
C->length=k;
returnC;
}

SqList*OrList(SqList*A,SqList*B){/*A∪B*/
inti,j,flag;
DataTypee;
SqList*C=(SqList*)malloc(sizeof(SqList));
C->length=A->length+B->length;
C->data=(DataType*)malloc(C->length*sizeof(DataType));
for(i=0;i<A->length;++i)C->data[i]=A->data[i];
for(i=0;i<B->length;++i){
e=B->data[i];
flag=1;
for(j=0;j<C->length;++j){
if(e==C->data[j]){
flag=0;
break;
}
}
if(flag)InsertList(C,e);
}
returnC;
}

voidPrintList(SqList*L){
inti;
for(i=0;i<L->length;++i)
printf("%d",L->data[i]);
printf(" ");
}

voidFreeList(SqList*L){
free(L->data);
free(L);
}

voidmain(){
DataTypex;
DataTypearra[]={36,24,31,5,90,65,70,39,37};
DataTypearrb[]={9,8,43,51,37,89,33,46,29,80,56};
intalen=sizeof(arra)/sizeof(arra[0]);
intblen=sizeof(arrb)/sizeof(arrb[0]);
SqList*A=CreateList(arra,alen);
printf("A线性表为:");
PrintList(A);
SqList*B=CreateList(arrb,blen);
printf("B线性表为:");
PrintList(B);
SqList*C=AndList(A,B);
SqList*D=OrList(A,B);
printf("C=A∩B:");
PrintList(C);
printf("D=A∪B:");
PrintList(D);

printf("在D表中插入数据:");
scanf("%d",&x);
InsertList(D,x);
printf("D表插入x后:");
PrintList(D);

printf("删除D表中数据:");
scanf("%d",&x);
RemoveListElem(D,x);
printf("删除x后的D表为:");
PrintList(D);
FreeList(A);
FreeList(B);
FreeList(C);
FreeList(D);
}

④ C语言建立顺序表

#include"iostream.h"
#include"malloc.h"
#include"stdio.h"
#define MAX_LIST_SIZE 100
typedef int elemtype;
typedef struct Node
{
elemtype *data;
int length;
int listsize;
}SqList;

void InitList(SqList &L)
{
L=(SqList *)malloc(MAX_LIST_SIZE*sizeof(SqList));
L->length=0;
L->listsize=MAX_LIST_SIZE;
}
void Insert(SqList &L,int i,elemtype x)
{
int k;
for(k=L->length;k>=i;k--)
*L->data[k+1]=*L->data[k];
*L->data[k]=x;
}
void Print(SqList L)
{
for(int i=0;i<L->length;i++)
cout<<*L->data[i]<<" ";
}

void main()
{
elemtype e;
int n;
SqList *L;
InitList(L);
cout<<"输入你要插入的元素:"<<endl;
cin>>e;
cout<<"输入你要插入的位置:"<<endl;
cin>>n;
Insert(L,n,e);
Print(L);
}
这里就简要的写了下第一小问,时间问题,没有调试,你自己看看
其实网上这方面的资料很多的,你可以网络一下

⑤ C语言顺序表问题

L->last=-1;
顺序表长度初始化为-1,if(i<1||i>=L->last+1) return 0;if语句将会始终判断为真,不会执行下面的语句,因而就不会插入
还有按你的插入法,是将原位置的数后移,那么如果要插入到顺序表末尾的话,i应为L->last+1吧,这样的话,你的判断语句就应为i>L->last+1

for(int j=L->last;j>=i;j--) /*将data[i]及后面的元素后移一个位置*/
L->data[j+1]=L->data[j];
L->data[i]=e; /*将插入的数值e附值给要第i个位序的数组元素*/
L->last++; /*顺序表长度增1*/
return 1;
}

⑥ 用C语言编写一个有关顺序表的程序代码

#include<stdio.h>
#include<stdlib.h>

#define Size 50

//定义顺序表结构体类型

typedef struct Table{
int*head;//顺序表头指针,为整型
int length;//顺序表中元素个数
int size; //顺序表的长度
}Table;

//创建顺序表
Table CreateTable(){
Table T;
if(!(T.head=(int*)malloc(Size*sizeof(int)))){
printf("内存分配错误!\n");
exit(0);
}

T.size=Size;
T.length=0;
return T;
}

//增加
void Insert(Table T,int set,int values)//set为插入的位置,values为值
{
//首先判断插入位置是否正确
if(set<0||set>T.length){
printf("插入位置不正确!\n");
reutrn;
}

//判断是否有足够的内存空间存储增加的数
if(T.length==T.size){
if(!(T.head=(int*)realloc(T.head,(T.size+10)*sizeof(int)))){
printf("内存分配错误!\n");
exit(0);
}
T.size+=10;
}

//插入数据
for(int i=s.length;i>set;i--)
T.head[i]=T.head[i-1];

T.head[set]=values;
T.length++;
}

//删除
void Delete(Tabel T,int set)
{
if(set<0||set>=T.length)
{
printf("删除数的位置不争确,删除失败!\n");
return;
}

//输出数据
for(int i=set;i<s.length;i++)
T.head[i]=T.head[i+1];
T.length--;
}

//查找
int Search(Tabel T,int value)
{
for(int i=0;i<T.length;i++)
if(T.head[i]==value)
return i;
return -1;
}

⑦ C语言顺序表简单问题

/*

A线性表为: 顺序表练习程序(C)

B线性表为: 该字符串将写入.txt文件

Press any key to continue

*/

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

typedefcharDataType;//定义数据数据类型

typedefstruct{
DataType*data;//data指向数据区的首个数据
intlength;//数据长度
}SqList;

SqList*CreateList(DataType*s){
SqList*L;
intlen=strlen(s);
L=(SqList*)malloc(sizeof(SqList));
L->data=(DataType*)malloc(len+1);
strcpy(L->data,s);
L->length=len;
returnL;
}

voidPrintList(SqList*L){
printf("%s ",L->data);
}

voidWriteFile(SqList*L,FILE*fw){
fprintf(fw,"%d%s ",L->length,L->data);
}

voidFreeList(SqList*L){
free(L->data);
free(L);
}

intmain(){
DataType*arra="顺序表练习程序(C)";
DataType*arrb="该字符串将写入.txt文件";
FILE*fw=fopen("F:\VC\顺序表数据.txt","wt");
if(fw==NULL){
printf("不能打开数据文件<F:\VC\顺序表数据.txt> ");
return1;
}
SqList*A=CreateList(arra);
printf("A线性表为:");
PrintList(A);
SqList*B=CreateList(arrb);
printf("B线性表为:");
PrintList(B);
WriteFile(A,fw);
WriteFile(B,fw);
fclose(fw);
FreeList(A);
FreeList(B);
return0;
}

⑧ c语言 顺序表 排序

///是不是要这样,
#include

#define
MAXSIZE
10
//
待排顺序表最大长度
typedef
int
KeyType;
//
关键字类型为整数类型
typedef
struct
sqlist
{
KeyType
r[MAXSIZE+1];
//
r[0]闲置
int
length;
//
顺序表长度
}SqList;
//建立顺序表//
SqList
InputSList()
{int
x;SqList
L;
L.length=0;
printf("\n请输入数据,结束输入-1!\n");
scanf("%d",&x);
while(x!=-1)
{
L.r[++L.length]=x;
if(L.length==MAXSIZE)
{
printf("\n顺序表已满!\n");
break;
}
scanf("%d",&x);
}
return
L;
}
//直接插入排序//
void
InsertionSort
(SqList
*L
)
{
//
对顺序表
L
作直接插入排序。
int
i,j;
SqList
*p=L;
for
(
i=2;
ilength;
++i
)
if
(p->r[i]
<
p->r[i-1])
{
p->r[0]
=
p->r[i];
p->r[i]=p->r[i-1];
for
(
j=i-2;
p->r[0]
<
p->r[j];
--
j
)
p->r[j+1]
=
p->r[j];
//
记录后移
p->r[j+1]
=
p->r[0];
//
插入到正确位置
}
}
//冒泡排序//
void
BubbleSort(SqList
*L)
{
int
i,j,t;
SqList
*p=L;
for
(i=p->length;i>1;--i){
for
(j=1;j<i;++j)
if
(p->r[j+1]r[j]){
t=p->r[j+1];
p->r[j+1]=p->r[j];
p->r[j]=t;
}
}
}
//简单选择排序//
void
SelectSort
(SqList
*L
)
{
SqList
*p=L;
int
i,
j,
k;
KeyType
temp;
for
(i=1;
ilength;
++i)
{
k=i;
for
(j=i+1;
jlength;
j++)
if
(p->r[j]r
[k])
k=j;
if
(k!=i)
{temp=p->r
[i];
p->r
[i]=p->r
[k];
p->r
[k]=temp;
}
}
}
void
display(SqList
*L)
{
SqList
*p;
p=L;
if
(p->length!=0)
{
while(p->length)
{
printf("%d
",p->r[p->length]);
p->length--;
}
}
printf("\n");
}
void
main()
{
SqList
L;
L=InputSList();
InsertionSort
(&L);
//
SelectSort
(&L)
;
//
BubbleSort(&L);
display(&L);
}

⑨ 是C语言中建立顺序表的程序

C语言中建立顺序表的操作顺序如下:

1.清空顺序表:其实清空只不过将元素长度置0,让后面插入数据函数的长度从0开始,其实并不是真正清空,之前的数据元素在内存中还存在,只不过可以被新元素覆盖而已。

2.判断顺序表是否为空

⑩ C语言顺序表

#include <stdio.h>#include <stdlib.h>
typedef struct {
int data[20];
int length;
}SqList;

void initnode(SqList &L);
void creatnode(SqList &L);
void printnode(SqList &L);
void main() //对函数返回值修饰
{
SqList L;
initnode(L); //引言不需要&,去掉&
creatnode(L); //引言不需要&,去掉&
printnode(L); //引言不需要&,去掉&,另外函数名字写错啦,应该是printnode
}
void initnode(SqList &L)
{
//L.data=(SqList*)malloc(100*sizeof(SqList)); //不用分配内存啦,参数L的内存是调用函数分配的
L.length=0;
}
void creatnode(SqList &L)
{
int i,n;printf("输入学生数量:\n");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("请输入第%d个学生数据",i+1);
scanf("%d",L.data);L.length++;
}
}
void printnode(SqList &L)
{
int i;
for(i=0;i<L.length;i++)
{
printf("%d",L.data[i]);
}
}

错误的地方确实很多,修改的地方都加注释啦,修改之后编译通过啦,有疑问请追问,多谢~

热点内容
安卓系统中哪个软件最耗电 发布:2024-12-25 08:38:44 浏览:824
ssrssql 发布:2024-12-25 08:38:41 浏览:953
ai定位脚本 发布:2024-12-25 08:33:35 浏览:956
炎黄解说我的世界中国服务器 发布:2024-12-25 08:33:28 浏览:796
sql2008发布 发布:2024-12-25 08:27:09 浏览:342
如何用存档开服务器 发布:2024-12-25 08:23:27 浏览:713
安卓手机为什么不显示通知栏 发布:2024-12-25 08:21:15 浏览:906
解压肚子疼 发布:2024-12-25 08:15:01 浏览:589
安卓怎么屏幕不灭 发布:2024-12-25 08:05:55 浏览:966
低配置手机怎么开使命高帧率 发布:2024-12-25 07:53:38 浏览:389