1. 编程实现在顺序存储的有序表中插入一个元素(数据类型为整型)。
#include #include #include #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define ElemType int #define MAXSIZE 100 /*此处的宏定义常量表示线性表可能达到的最大长度*/ typedef struct { ElemType elem[MAXSIZE]; /*线性表占用的数组空间*/ int last; /*记录线性表中最后一个元素在数组elem[ ]中的位置(下标值),空表置为-1*/ }SeqList; #include "common.h" #include "seqlist.h" void px(SeqList *A,int j); void main() { SeqList *l; int p,q,r; int i; l=(SeqList*)malloc(sizeof(SeqList)); printf("请输入线性表的长度:"); scanf("%d",&r); l->last = r-1; printf("请输入线性表的各元素值:\n"); for(i=0; ilast; i++) { scanf("%d",&l->elem[i]); } px(l,i); printf("请输入要插入的值:\n"); scanf("%d",&l->elem[i]);
i++; px(l,i); l->last++; for(i=0; ilast; i++) { printf("%d ",l->elem[i]); } printf("\n"); } void px(SeqList *A,int j) { int i,temp,k; for(i=0;ielem[i]elem[k]) {temp=A->elem[i]; A->elem[i]=A->elem[k]; A->elem[k]=temp; }} } }
2. 编程实现把顺序表中从i 个元素开始的k 个元素删除(数据类型为整型)。
#include #include #include #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define ElemType int #define MAXSIZE 100 /*此处的宏定义常量表示线性表可能达到的最大长度*/ typedef struct { ElemType elem[MAXSIZE]; /*线性表占用的数组空间*/ int last; /*记录线性表中最后一个元素在数组elem[ ]中的位置(下标值),空表置为-1*/ }SeqList; #include "common.h" #include "seqlist.h" void px(SeqList *A,int j); int DelList(SeqList *L,int i,SeqList *e,int j) /*在顺序表L 中删除第i 个数据元素,并用指针参数e 返回其值。i 的合法取值为1≤i ≤L.last+1 */ { int k,a,b,c; if((iL->last+2)) { printf("删除位置不合法!");
return(ERROR); } if(j>L->last-i) { printf("删除位置不合法!"); return(ERROR); } for(b=0,a=i-1;aelem[b]=L->elem[a];} e->last=b; /* 将删除的元素存放到e 所指向的变量中*/ for(k=i;k+j-1last;k++) { L->elem[k-1]=L->elem[k+j-1]; }/*将后面的元素依次前移*/ L->last=L->last-j; printf("删除的元素值为:"); for(c=0;celem[c]);} printf("\n"); return(OK); } void main() { SeqList *l,*q; int p,r; int i,j,m; l = (SeqList*)malloc(sizeof(SeqList)); q = (SeqList*)malloc(sizeof(SeqList)); printf("请输入线性表的长度:"); scanf("%d",&r); l->last = r-1; printf("请输入线性表的各元素值:\n"); for(i=0; ilast; i++) { scanf("%d",&l->elem[i]); } px(l,i); for(i=0;ielem[i]);} printf("\n"); printf("请输入要删除的元素位置(位置+个数):\n"); scanf("%d%d",&p,&j); m=DelList(l,p,q,j); if(m==0) {printf("无法删除"); exit(0);} else if(m==1) { printf("线性表内余下元素为:\n");
for(i=0;ielem[i]);} printf("\n");} } void px(SeqList *A,int j) { int i,temp,k; for(i=0;ielem[i]elem[k]) {temp=A->elem[i]; A->elem[i]=A->elem[k]; A->elem[k]=temp; }} } printf("排序完成!"); }
2. 编程序实现将单链表的数据逆置,即将原表的数据(a1,a2….an )变成 (an,…..a2,a1) 。(单
链表的数据域数据类型为一结构体,包括学生的部分信息:学号,姓名,年龄
#include #include #include /*#define ElemType char*/ typedef struct Node /*结点类型定义*/ { int num; char name[10]; int age; struct Node * next; }Node, *LinkList; /* LinkList为结构指针类型*/ LinkList CreateFromTail() /*通过键盘输入表中元素值,利用尾插法建单链表, 并返回该单链表头指针L*/ { LinkList L; Node *r, *s; int a; char b[10]; int c; int flag =1; /*设置一个标志,初值为1,当输入"-1" 时,flag 为0,建表结束*/ L=(Node * )malloc(sizeof(Node)); L->next=NULL; /*为头结点分配存储空间,建立空的单链表L*/ r=L; /*r指针动态指向链表的当前表尾,以便于做尾插入,其初值指向头结点*/ /*循环输入表中元素值,将建立新结点s 插入表尾*/ printf("输入学生的信息:\n"); printf("学号 姓名 年龄\n");
while(flag) { scanf("%d",&a); if(a==-1) flag=0; else { scanf("%s%d",b,&c); s=(Node*)malloc(sizeof(Node)); s->num=a; strcpy(s->name,b); s->age=c; r->next=s; r=s; } } r->next=NULL; return L; } void ReverseList(LinkList L) { Node *p,*q; p=L->next; L->next=NULL; while(p!=NULL) { q=p->next; /*q指针保留p->next得值*/ p->next=L->next; L->next=p; /*将p 结点头插入到单链表L 中*/ p=q; /*p指向下一个要插入的结点*/ } } void main() { LinkList l; Node *p; printf("请输入链表数据, 以-1结束!\n"); l = CreateFromTail(); printf("输入的单链表为:\n"); p = l->next; while(p!=NULL) { printf("%d %s %d\n",p->num,p->name,p->age); p=p->next; } ReverseList(l); printf("逆置后的单链表为:\n"); p = l->next; while(p!=NULL) { printf("%d %s %d\n",p->num,p->name,p->age); p=p->next;
1. 编程实现在顺序存储的有序表中插入一个元素(数据类型为整型)。
#include #include #include #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define ElemType int #define MAXSIZE 100 /*此处的宏定义常量表示线性表可能达到的最大长度*/ typedef struct { ElemType elem[MAXSIZE]; /*线性表占用的数组空间*/ int last; /*记录线性表中最后一个元素在数组elem[ ]中的位置(下标值),空表置为-1*/ }SeqList; #include "common.h" #include "seqlist.h" void px(SeqList *A,int j); void main() { SeqList *l; int p,q,r; int i; l=(SeqList*)malloc(sizeof(SeqList)); printf("请输入线性表的长度:"); scanf("%d",&r); l->last = r-1; printf("请输入线性表的各元素值:\n"); for(i=0; ilast; i++) { scanf("%d",&l->elem[i]); } px(l,i); printf("请输入要插入的值:\n"); scanf("%d",&l->elem[i]);
i++; px(l,i); l->last++; for(i=0; ilast; i++) { printf("%d ",l->elem[i]); } printf("\n"); } void px(SeqList *A,int j) { int i,temp,k; for(i=0;ielem[i]elem[k]) {temp=A->elem[i]; A->elem[i]=A->elem[k]; A->elem[k]=temp; }} } }
2. 编程实现把顺序表中从i 个元素开始的k 个元素删除(数据类型为整型)。
#include #include #include #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define ElemType int #define MAXSIZE 100 /*此处的宏定义常量表示线性表可能达到的最大长度*/ typedef struct { ElemType elem[MAXSIZE]; /*线性表占用的数组空间*/ int last; /*记录线性表中最后一个元素在数组elem[ ]中的位置(下标值),空表置为-1*/ }SeqList; #include "common.h" #include "seqlist.h" void px(SeqList *A,int j); int DelList(SeqList *L,int i,SeqList *e,int j) /*在顺序表L 中删除第i 个数据元素,并用指针参数e 返回其值。i 的合法取值为1≤i ≤L.last+1 */ { int k,a,b,c; if((iL->last+2)) { printf("删除位置不合法!");
return(ERROR); } if(j>L->last-i) { printf("删除位置不合法!"); return(ERROR); } for(b=0,a=i-1;aelem[b]=L->elem[a];} e->last=b; /* 将删除的元素存放到e 所指向的变量中*/ for(k=i;k+j-1last;k++) { L->elem[k-1]=L->elem[k+j-1]; }/*将后面的元素依次前移*/ L->last=L->last-j; printf("删除的元素值为:"); for(c=0;celem[c]);} printf("\n"); return(OK); } void main() { SeqList *l,*q; int p,r; int i,j,m; l = (SeqList*)malloc(sizeof(SeqList)); q = (SeqList*)malloc(sizeof(SeqList)); printf("请输入线性表的长度:"); scanf("%d",&r); l->last = r-1; printf("请输入线性表的各元素值:\n"); for(i=0; ilast; i++) { scanf("%d",&l->elem[i]); } px(l,i); for(i=0;ielem[i]);} printf("\n"); printf("请输入要删除的元素位置(位置+个数):\n"); scanf("%d%d",&p,&j); m=DelList(l,p,q,j); if(m==0) {printf("无法删除"); exit(0);} else if(m==1) { printf("线性表内余下元素为:\n");
for(i=0;ielem[i]);} printf("\n");} } void px(SeqList *A,int j) { int i,temp,k; for(i=0;ielem[i]elem[k]) {temp=A->elem[i]; A->elem[i]=A->elem[k]; A->elem[k]=temp; }} } printf("排序完成!"); }
2. 编程序实现将单链表的数据逆置,即将原表的数据(a1,a2….an )变成 (an,…..a2,a1) 。(单
链表的数据域数据类型为一结构体,包括学生的部分信息:学号,姓名,年龄
#include #include #include /*#define ElemType char*/ typedef struct Node /*结点类型定义*/ { int num; char name[10]; int age; struct Node * next; }Node, *LinkList; /* LinkList为结构指针类型*/ LinkList CreateFromTail() /*通过键盘输入表中元素值,利用尾插法建单链表, 并返回该单链表头指针L*/ { LinkList L; Node *r, *s; int a; char b[10]; int c; int flag =1; /*设置一个标志,初值为1,当输入"-1" 时,flag 为0,建表结束*/ L=(Node * )malloc(sizeof(Node)); L->next=NULL; /*为头结点分配存储空间,建立空的单链表L*/ r=L; /*r指针动态指向链表的当前表尾,以便于做尾插入,其初值指向头结点*/ /*循环输入表中元素值,将建立新结点s 插入表尾*/ printf("输入学生的信息:\n"); printf("学号 姓名 年龄\n");
while(flag) { scanf("%d",&a); if(a==-1) flag=0; else { scanf("%s%d",b,&c); s=(Node*)malloc(sizeof(Node)); s->num=a; strcpy(s->name,b); s->age=c; r->next=s; r=s; } } r->next=NULL; return L; } void ReverseList(LinkList L) { Node *p,*q; p=L->next; L->next=NULL; while(p!=NULL) { q=p->next; /*q指针保留p->next得值*/ p->next=L->next; L->next=p; /*将p 结点头插入到单链表L 中*/ p=q; /*p指向下一个要插入的结点*/ } } void main() { LinkList l; Node *p; printf("请输入链表数据, 以-1结束!\n"); l = CreateFromTail(); printf("输入的单链表为:\n"); p = l->next; while(p!=NULL) { printf("%d %s %d\n",p->num,p->name,p->age); p=p->next; } ReverseList(l); printf("逆置后的单链表为:\n"); p = l->next; while(p!=NULL) { printf("%d %s %d\n",p->num,p->name,p->age); p=p->next;