1、
编程实现顺序表的各种基本运算,并在此基础上设计一个主程序,完成如下功能:
(1)初始化顺序表;
(2)给定一个整型数据元素,将此元素插入到顺序表的第i个位置;
(3)删除顺序表中第i个位置的元素,利用e返回被删除的元素。
#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int ElemType;
typedef int Status;
//----- 顺序表的顺序存储表示 -----
#define LIST_INIT_SIZE 100 // 存储空间的初始分配量
#define LISTINCREMENT 10 // 存储空间的分配增量
typedef struct {
ElemType *elem; // 存储空间的基址
int length; // 表长
int size;// 存储容量
int increment; // 扩容时,增加的存储容量
} SqList; //顺序表
// 构造一个顺序表
Status InitSqlist(SqList &L){
L.elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType));
if(!L.elem) exit (OVERFLOW);
L.length = 0;
L.size = LIST_INIT_SIZE;
L.increment = LISTINCREMENT;
return OK;
}
// 判顺序表是否为空表
Status ListEmpty(SqList L){
if (L.length==0) return OK;
else return ERROR;
}
//顺序表插入函数
Status ListInsert_Sq(SqList &L, int i ,ElemType e){
//请在此填写代码,将该算法补充完整,参见课本和课件相关章节
int j;
if (i<1 || i>L.length+1)
return false;
i--;
for (j=L.length;j>i;j--)
L.elem[j]=L.elem[j-1];
L.elem[i]=e;
L.length++;
return true;
}
//顺序表删除元素函数
Status ListDelete_Sq(SqList &L, int i, ElemType &e){
//请在此填写代码,将该算法补充完整,参见课本和课件相关章节
int j;
if(i<1||i>L.length)
return false;
i--;
e=L.elem[i];
for (j=i;j<L.length-1;j++)
L.elem[j]=L.elem[j+1];
L.length--;
return true;
}
//输出顺序表函数
void OutList_Sq(SqList L)
{ int i;
ElemType e;
if(ListEmpty(L)){
printf("这是一个空表!");
}
else
{
printf("顺序表为:");
for(i=0;i<L.length;i++)
printf("%6d",L.elem[i]);
}
printf("\n");
}
//主函数
int main()
{ SqList L;
int cord,i; ElemType a;
printf(" 姓名:蔡旭胜 \n 学号:2050414821 \n 班级:软件设计11班");
printf("第一次使用必须初始化!\n");
do{
printf("\n 主菜单 \n");
printf(" 1 初始化顺序表 ");
printf(" 2 插入一个元素 ");
printf(" 3 删除一个元素 ");
printf(" 4 结束程序运行 ");
printf("\n-------------------------------------------------------------------\n");
printf("请输入您的选择( 1, 2, 3, 4)");
scanf("%d",&cord);
printf("\n");
switch(cord){
case 1:
InitSqlist(L);
OutList_Sq(L);
break;
case 2:
printf("\n请输入要插入的插入位置和数据元素(如:3 20)");
scanf("%d%d",&i,&a);
ListInsert_Sq(L,i,a);
printf("\n插入%d元素之后的",a);
OutList_Sq(L);
break;
case 3:
printf("\n请输入要删除的数据元素的位置(如: 3)");
scanf("%d",&i);
ListDelete_Sq(L,i,a);
printf("\n删除第%d个位置的元素之后",i);
OutList_Sq(L);
break;
case 4:
exit(0);
}
}while (cord<=4);
return 1;
}
2、
编程实现建立一个单链表,并在此表中插入一个元素和删除一个元素
(1)通过键盘读取元素建立单链表;
(2)指定一个位置,在此位置之前插入一个新元素;
(3)指定一个位置,删除此位置元素。
#include "stdio.h"
#include "stdlib.h"
#define OK 1
#define ERROR 0
typedef int ElemType;
typedef int Status;
typedef struct Lnode {
ElemType data;
struct Lnode *next;
}Lnode,*LinkList;
//以下是建立单链表
void CreatList_L(LinkList &head)
{ LinkList tail, p;
int n,i;
p=(Lnode *)malloc(sizeof(Lnode));
head=tail=p;
head->next=NULL;
printf("\n请输入链表的长度:");
scanf("%d", &n);
printf("\n请输入%d个整型数据元素",n);
for(i=1;i<=n;i++){
p= (Lnode *)malloc(sizeof(Lnode));
scanf("%d", &p->data);
p->next=NULL;
tail->next=p;
tail=p;
}
printf("\n单链表的建立成功!");
}
//以下是输出单链表
void OutputList_L(LinkList L){
LinkList p = L->next;
if(p==NULL){
printf("是一个空表!\n");
return;
}
printf("单链表是:");
while (p ) {
printf("%4d",p->data);
p = p->next;
}
printf("\n");
}
//在第 i 个元素之前插入一个元素
Status ListInsert_L(LinkList L, int i, ElemType e) {
LinkList p,s;
p=L;
int j=0;
for(j=0;j<i;j++)
{
p=p->next;
}
s= (Lnode *)malloc(sizeof(Lnode));
s->data=e;
s->next=p->next;
p->next=s;
//请在此填写代码,将该算法补充完整,参见课本和课件相关章节
return OK;
}
// 删除第 i 个元素
Status ListDelete_L(LinkList L, int i, ElemType &e) {
LinkList p,q;
p=L;
q=L;
int j=0;
for(j=0;j<i-1;j++)
{
p=p->next;
q=q->next;
}
q= q->next;
e=q->data;
p->next=p->next->next;
//请在此填写代码,将该算法补充完整,参见课本和课件相关章节
return OK;
}
int main()
{ LinkList L;
int cord,i; ElemType a;
printf(" 姓名:蔡旭胜 \n 学号:2050414821 \n 班级:软件设计11班");
printf("\n 您是第一次使用请先创建一个单链表!\n");
do{
printf("\n 主菜单 \n");
printf(" 1 创建一个单链表 ");
printf(" 2 插入一个元素 ");
printf(" 3 删除一个元素 ");
printf(" 4 结束程序运行 ");
printf("\n-------------------------------------------------------------------\n");
printf("请输入您的选择( 1, 2, 3, 4)");
scanf("%d",&cord);
printf("\n");
switch(cord){
case 1:
CreatList_L(L);
OutputList_L(L);
break;
case 2:
printf("\n请输入要插入的插入位置和数据元素(如:3 20)");
scanf("%d%d",&i,&a);
if(ListInsert_L(L,i,a))
{
printf("\n插入元素成功!插入%d元素之后的",a);
OutputList_L(L);
}
else printf("插入元素失败!\n");
break;
case 3:
printf("\n请输入要删除的数据元素的位置(如: 3)");
scanf("%d",&i);
if(ListDelete_L(L,i,a))
{
printf("\n删除元素成功!被删除的元素是 %d\n",a);
printf("\n删除第%d个位置的元素之后",i);
OutputList_L(L);
}
else printf("删除位置错误,请重新执行!\n");
break;
case 4:
exit(0);
}
}while (cord<=4);
return 1;
}
来自课下作业