牛骨文教育服务平台(让学习变的简单)

著名的计算机科学家N.Wirth教授曾提出一个公式:算法+数据结构=程序

“数组”类型表示顺序存储结构,用指针来表示链式存储结构。指针p指向下一个对象单元,p的值不是一增加1,而是增加对象类型所占的字节数。

一个结构提示类型student,没有定义变量,就不会分配存储单元,不能再程序中直接访问结构体类型名。

线性表是N个具有相同特性的数据元素的有限序列。线性表分为 顺序存储结构和链式存储结构。

顺序表:

/*顺序表的建立与输出*//  
#include<stdio.h>  
#include<malloc.h>  
#include<windows.h>  
#define maxsize 50  
typedef int elemtype;  
typedef struct //定义顺序表的存储类型  
{  
    elemtype data[maxsize];  
    int length;  
}sqlist;  
  
void createlist(sqlist *&L,elemtype a[],int n)//建立顺序表  
{  
    int i;  
    L=(sqlist *)malloc(sizeof(sqlist));  
    for(i=0;i<n;i++)  
    L->data[i]=a[i];  
    L->length=n;  
}  
void displist(sqlist *L) //输出顺序表  
{  
    int i;  
    for(i=0;i<L->length;i++)  
    printf("%d ",L->data[i]);  
    printf("
");  
}  
  
void listempty(sqlist *L) //判断线性表是否为空  
{  
    int m;  
    m=L->length;  
    if(m!=0)  
    printf("此线性表不为空
");  
    else  
    printf("此为空线性表
");  
}  
  
void listlength(sqlist *L) //求线性表的长度  
{  
    int m;  
    m=L->length;  
    printf("此线性表的长度为: %d
",m);  
}  
  
void getelem(sqlist *L) //从顺序表中取值  
{  
    int i,e;  
    printf("请输入需取第几位元素: ");  
    scanf("%d",&i);  
    if(i<1||i>L->length)  
    printf("输入错误");  
else  
    { e=L->data[i-1];  
        printf("取值成功第%d位元素为:%d
",i,e);  
    }  
}  
  
void locateelem(sqlist *L) //在顺序表中查找元素  
{  
    int e,i=0;  
    printf("请输入需查找元素:");  
    scanf("%d",&e);  
    while(i<L->length&&L->data[i]!=e)  
    i++;  
    if(i>=L->length)  
    printf("不存在此元素
");  
    else  
    printf("此元素在第%d位
",i+1);  
}  
  
void listinsert(sqlist *&L) //插入元素   
{  
    int i,j,e;  
    printf("请输入插入位置:");  
    scanf("%d",&i);  
    if(i<1||i>L->length+1)  
    printf("输入错误
");  
    else  
    {  
    printf("请输入需插入元素:");  
    scanf("%d",&e);  
    i--;  
    for(j=L->length;j>i;j--)  
    L->data[j]=L->data[j-1];  
    L->data[i]=e;  
    L->length++;  
    printf("插入成功
");  
    }  
}  
  
void listdelete(sqlist *&L) //删除元素  
{  
    int i,j,e;  
    printf("请输入需删除元素位置:");  
    scanf("%d",&i);  
    if(i<1||i>L->length+1)  
    printf("输入错误
");  
    else  
    {  
    i--;  
        e=L->data[i];  
        for(j=i+1;j<L->length;j++)  
        L->data[j-1]=L->data[j];  
        L->length--;  
        printf("已删除%d元素
",e);  
    }  
}  
  

void main()  
{ 
printf(" ***************欢迎使用顺序表基本运算系统********************
");  
printf(" *************如有问题请与本人联系**********************
");  
sqlist *q;  
int i,m,n=10,a[10];  
printf("请输入10个数组元素:
");  
for(i=0;i<10;i++)  
scanf("%d",&a[i]);  
createlist(q,a,n);  
printf("顺序表建立完毕
");  
while(1)  
    {  
        printf("请选择:");  
        printf(" 1.输出链表
");  
        printf(" 2.判断线性表是否为空
");  
        printf(" 3.求线性表的长度
");  
        printf(" 4.从顺序表中取值
");  
        printf(" 5.在顺序表中查找元素
");  
        printf(" 6.插入元素
");  
        printf(" 7.删除元素
");  
        printf(" 8.退出
");  
        scanf("%d",&m);  
        switch(m)  
            { 
            case 1:displist(q);break;  
            case 2:listempty(q);break;  
            case 3:listlength(q);break;  
            case 4:getelem(q);break;  
            case 5:locateelem(q);break;  
            case 6:listinsert(q);break;  
            case 7:listdelete(q);break;  
            case 8:exit(0);  
            default:printf("输入错误
");  
            }  
    }  
}