C语言线性表急求大神解

作者&投稿:达奚甘 (若有异议请与网页底部的电邮联系)
C语言代码大爱线性表求大神帮忙写注释越详细越好~

这东西难道不是根据R来标记D删除的是头或者尾?
然后根据R是否为偶数判断是否需要翻转[毕竟R时间复杂度为n,D才常数]
虽然不知道你写那么多乱七八糟的是啥但是看起来好厉害的样子!(手动滑稽

#include #include const int LIST_INIT_SIZE = 100;typedef struct {int *elem;int length;int listsize;}SqList;int InitList_Sq(SqList *L) {(*L).elem = (int *)malloc(LIST_INIT_SIZE * sizeof(int)); if (!(*L).elem) return (0); (*L).length = 0; (*L).listsize = LIST_INIT_SIZE; return (1);}//InitList sqint main() {SqList *L = (SqList *)malloc(sizeof(SqList)); // 先获取框架,而后才可能有表if(!InitList_Sq(L)) printf("failed to init
");else printf("init sq list complete
");printf("%d
",L->listsize);return 0;}

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

typedef struct
{
int *data,len;
}SL;

void showlist(SL *l)
{
int i;

for(i=0;i<(*l).len-1;i++)
{
printf("%d ",(*l).data[i]);
}
printf("%d\n",(*l).data[(*l).len-1]);
}

void createlist(SL *l)
{
int i,n;

printf("请输入线性表的长度:");
scanf("%d",&n);
(*l).len=n;
(*l).data=(int*)calloc(n,sizeof(int));
printf("请输入%d个整数:",n);
for(i=0;i<n;i++)
scanf("%d",(*l).data+i);
}

//找到,返回第1次出现的下标,
//找不到返回-1
int search(SL *l,const int n)
{
int i;

for(i=0;i<(*l).len;i++)
{
if(n==(*l).data[i])
return i;
}
return -1;
}

//n为要删除的整数的值,
//会删除所有值为n的线性表的元素
void delete(SL *l,const int n)
{
int i,j;

for(i=0;i<(*l).len;)
{
if(n==(*l).data[i])
{
for(j=i+1;j<(*l).len;j++)
{
(*l).data[j-1]=(*l).data[j];
}
(*l).len--;
}
else
i++;
}
}

void deleterange(SL *l,const int min,const int max)
{
int i;

for(i=0;i<(*l).len;i++)
{
if((*l).data[i]>=min && (*l).data[i]<=max)
delete(l,(*l).data[i]);
}
}

void freelist(SL *l)
{
if(!(*l).data)
free((*l).data);
}

int main()
{
int loc,tofind,min,max;
SL l;

createlist(&l);
printf("请输入要查找的整数:");
scanf("%d",&tofind);
if(-1!=(loc=search(&l,tofind)))
printf("此数据在线性表中第1次出现的下标是:%d\n",loc);
else
puts("线性表中无此数据");
printf("请输入要删除的整数的最小值 最大值:");
scanf("%d %d",&min,&max);
deleterange(&l,min,max);
printf("删除值为%d-%d的元素后的线性表如下:\n",min,max);
showlist(&l);
freelist(&l);
system("PAUSE");
return 0;
}

可以看我的回答,有个ArrayList类

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

typedef int DataType; // 定义数据类型

typedef struct {
DataType *data;   // data指向数据区的首个数据
int length;       // 当前数据长度
}SqList;

void Sort(SqList *L) {
int i,j,k;
DataType tmp;
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 *Create() {// 创建给定数据个数的顺序表
int n,i;
SqList *L = (SqList *)malloc(sizeof(SqList));
printf("数据个数:");
scanf("%d",&n);
L->data = (DataType *)malloc(n * sizeof(DataType));
if(L->data == NULL) {
L->length = 0;
return NULL;
}
printf("请输入%d个整数用于创建顺序表
",n);
for(i = 0; i < n; ++i)
scanf("%d",&L->data[i]);
L->length = n;
return L;
}

SqList *CreateList(DataType a[],int n) {
int i;
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);
return L;
}

int InsertList(SqList *L,DataType x) {
int i,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++;
return 1;
}
}
L->data[L->length++] = x;
return 1;
}

int RemoveListElem(SqList *L,DataType d) {
int i,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--;
return 1;
}
}
return 0;
}

int RemoveRangeElem(SqList *L,DataType a,DataType b) {//用于删除给定范围内的数据元素
int i,j,flag = 0;
for(i = 0; i < L->length; ++i) {
if(L->data[i] >= a && L->data[i] <= b) {
for(j = i; j < L->length - 1; ++j)
L->data[j] = L->data[j + 1];
L->length--;
flag = 1;
}
}
return flag;
}

SqList *AndList(SqList *A, SqList *B) {   /* A∩B */
int i,j,k = 0;
int len = (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;
return C;
}

SqList *OrList(SqList *A, SqList *B) {   /* A∪B */
int i,j,flag;
DataType e;
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);
}
return C;
}

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

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

void main() {
DataType x;
DataType arra[] = {36,24,31,5,90,65,70,39,37};
DataType arrb[] = {9,8,43,51,37,89,33,46,29,80,56};
int alen = sizeof(arra)/sizeof(arra[0]);
int blen = 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语言 统计线性表中元素的个数,int ListLength(struct Sqlist MyL...
答:线性表可以直接用malloc申请连续空间,按数组保存。但这样不方便后期增删。所以,建议使用链表来实现。下面代码就是用链表实现线性表。其中initList函数是生成了一个10节点的单向链表作为线性表。ListLength就是题目要的函数。(函数中顺带打印了链表内容,你不想要显示链表内容,就删掉printf语句)。include<...

数据结构 线性表 用c语言
答:define MAXSIZE 100 //表中元素的最大个数 typedef int ElemType;//元素类型 typedef struct list{ ElemType elem[MAXSIZE];//静态线性表 int length; //表的实际长度 }SqList;//顺序表的类型名

c语言 线性表(急)
答:完整的程序,用链表://--- include <stdio.h> include <stdlib.h> typedef struct node{ int id;double score;struct node *next;} node,list;void init(list **a,list **b) /*创建两个原链表*/ { double score[]={70,85,75,90,60,80,76,50};list *now,*ne;int i=0;b=*a=...

C语言数据结构线性表单链表的基本操作,写好了代码,编译无错,运行有错...
答:ListNode *p,*s;DataType key;ListNode *q;int i;DataType x;p=GreatListRH();printf("输入链表各结点的数据:\n");for(s=p->next;s!=NULL;s=s->next)printf("%c",s->data);printf("\n");printf("输入要查找的数据:");scanf("%c",&key);q=LocateNode(p,key);if(q!=NULL)...

关于c语言线性表
答:是不是b的表尾标志需要去掉,才能正确表达ab合并到一起了。比如ab是字符串的话,都有标志\n.合并成一个了当然要去掉一个表尾了。

C语言,线性表的,帮忙改改错,多谢啦~~~
答:只是把你用引用的参数改成指针,还有最开始的初始线表的函数改成返回表其他没改动了 C源文件:运行结果:下面的是头文件:include "stdio.h"#include "stdlib.h"#include "malloc.h"#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFASIBLE -1#define OVERFLOW -2#define ...

C语言 线性表的实现
答:printf("%c",L.data[i-1]);printf("\n");} void main(){ int i;ElemType e;SqList L;InitList(L);InsElem(L,'a',1);InsElem(L,'c',2);InsElem(L,'a',3);InsElem(L,'e',4);InsElem(L,'d',5);InsElem(L,'b',6);printf("xian xing biao:");DispList(L);printf...

关于c语言线性表的一个问题,请高手指教!
答:printf("pa_last=%c\npb_last=%c\n",*pa_last,*pb_last);endif;/*链接*/ while (pa <= pa_last && pb <= pb_last)if (*pa <= *pb){ *pc = *pa++; pc++;} else { *pc = *pb++; pc++;} while (pa <=pa_last){*pc = *pa++; pc++; } while (pb <=pb_...

C语言创建一个线性表,然后输出线性表,如何编写程序?
答://初始化顺序表 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("...

C语言数据结构求解
答:方法很多,可以在插入数据后再对线性表进行删改,也可以在插入前进行处理。我这里代码是在插入前处理。(注释掉的函数int getPNUM(struct Sqlist *st,int n);是我预留的,题2如果你想改成插入后,再对线性表素数进行查找,可以用这个函数。否则可以删除)。include <stdio.h> include <stdlib.h> i...