天天看點

算法與資料結構之順序表順序表

著名的計算機科學家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) //輸出順序表

for(i=0;i<l->length;i++)

printf("%d ",l->data[i]);

printf("\n");

void listempty(sqlist *l) //判斷線性表是否為空

int m;

m=l->length;

if(m!=0)

printf("此線性表不為空\n");

else

printf("此為空線性表\n");

void listlength(sqlist *l) //求線性表的長度

printf("此線性表的長度為: %d\n",m);

void getelem(sqlist *l) //從順序表中取值

int i,e;

printf("請輸入需取第幾位元素: ");

scanf("%d",&i);

if(i<1||i>l->length)

printf("輸入錯誤");

{ e=l->data[i-1];

printf("取值成功第%d位元素為:%d\n",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("不存在此元素\n");

printf("此元素在第%d位\n",i+1);

void listinsert(sqlist *&l) //插入元素 

int i,j,e;

printf("請輸入插入位置:");

if(i<1||i>l->length+1)

printf("輸入錯誤\n");

printf("請輸入需插入元素:");

i--;

for(j=l->length;j>i;j--)

l->data[j]=l->data[j-1];

l->data[i]=e;

l->length++;

printf("插入成功\n");

void listdelete(sqlist *&l) //删除元素

printf("請輸入需删除元素位置:");

e=l->data[i];

for(j=i+1;j<l->length;j++)

l->data[j-1]=l->data[j];

l->length--;

printf("已删除%d元素\n",e);

void main()

sqlist *q;

int i,m,n=10,a[10];

printf("請輸入10個數組元素:\n");

for(i=0;i<10;i++)

scanf("%d",&a[i]);

createlist(q,a,n);

printf("順序表建立完畢\n");

while(1)

printf("請選擇:");

printf(" 1.輸對外連結表\n");

printf(" 2.判斷線性表是否為空\n");

printf(" 3.求線性表的長度\n");

printf(" 4.從順序表中取值\n");

printf(" 5.在順序表中查找元素\n");

printf(" 6.插入元素\n");

printf(" 7.删除元素\n");

printf(" 8.退出\n");

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("輸入錯誤\n");

繼續閱讀