1. 程式人生 > >順序表的實現(C語言)

順序表的實現(C語言)

 /*********************
*
指向結構體變數的指標作函式引數
*
***********************/
#include<stdio.h>
#define MAXSIZE 100
typedef int datatype;
typedef struct
{
    datatype a[MAXSIZE];
    int size;
} sequence_list;
void init(sequence_list *);
int empty(sequence_list slt);
void append(sequence_list *slt,datatype x);
void display(sequence_list slt);
int find(sequence_list *slt,datatype x);
void insert(sequence_list *slt,int i,datatype x);
void  dele(sequence_list *slt,int position);
datatype get(sequence_list slt,int i);
int main(){
sequence_list L;
init(&L);


if(empty(L)){
printf("這個線性表是空的!請插入資料!!!\n");
}
printf("請輸入資料:");
datatype x=0;
int i;
for(i=0;i<5;i++){


scanf("%d",&x);
append(&L,x);
}
display(L);
printf("請輸入你要 查詢的數:");
scanf("%d",&x);
printf("您查詢的數在第%d個位置!\n",find(&L,x)+1);
printf("請輸入要獲取元素的位置:");


scanf("%d",&i);
int y=get(L,i);
printf("您查查的第%d個元素為:%d\n",i,y);
insert(&L,3,100);
printf("插入100的順序表為:");
display(L);datatype get(sequence_list slt,int i);
printf("\n");
dele(&L,0);
printf("刪除第一個數的效果為:");
display(L);
return 0;
}


void init(sequence_list *slt)
{
    slt->size=0;


}




int empty(sequence_list slt)//判斷是否為空
 {
   return (slt.size==0 ? 1:0);
 }
 void append(sequence_list *slt,datatype x)
 {
   if(slt->size==MAXSIZE)
     {printf("順序表是滿的!");exit(1);}
   slt->a[slt->size]=x;
   slt->size=slt->size+1;
 }
  void display(sequence_list slt)
 {
   int i;
   if(!slt.size) printf("\n順序表是空的!");
   else
   for(i=0;i<slt.size;i++)
        printf("%5d",slt.a[i]);
 }


int find(sequence_list *slt,datatype x){
int  i=0;
while(i<slt->size&&x!=slt->a[i]){
i++;
}
printf("一共%d個。在第%d箇中\n",slt->size,i);
return (i<slt->size?i:1);
}


datatype get(sequence_list slt,int i)//獲取 第i個節點
 {
   if(i<0||i>=slt.size)
     {printf("\n指定位置的結點不存在!");exit(1);}
   else
     return slt.a[i];
 }
 void insert(sequence_list *slt,int i,datatype x){
int j;
if(i<0||i>slt->size){
    printf("該位置 不存在 !");
}
if(slt->size>=MAXSIZE){
printf("不能再插了,再插就溢位了");
}
for(j=slt->size-1;j>=i;j--){
slt->a[j+1]=slt->a[j];
}
slt->a[i]=x;
slt->size++;
 }
void dele(sequence_list *slt,int position){//刪除節點特別重要
int i;
if(slt->size==0){
printf("\n順序表是 空的!沒法刪除!");exit(1);
}
if(position<0||position>slt->size){
    printf("\n指定 刪除的位置不存在!");exit(1);
}
for(i=position;i<slt->size-1;i++){


slt->a[i]=slt->a[i+1];


}
slt->size--;
}

相關推薦

佇列的順序實現C語言

#include <stdio.h> #include <stdlib.h> struct QueueRecord; typedef struct QueueRecord* Queue; typedef int ElementType;

資料結構——順序操作C語言實現

//順序表list #include"stdio.h" #define maxsize 15 typedef struct{ int a[maxsize]; int size; }list; //建立 void create(lis

順序的插入操作原理及實現C語言詳解

順序表中存放資料的特點和陣列這種資料型別完全吻合,所以順序表的實現使用的是陣列。換句話說,順序表中插入元素問題也就等同於討論如何向陣列中插入資料。 因此,順序表中插入資料元素,無非三種情況: 在表頭插入; 在表的中間某個位置插入; 直接尾隨順序表,作為表的最後一個元素; 無論在順序表的什麼位置插

順序實現C語言

 /********************* * 指向結構體變數的指標作函式引數 * ***********************/ #include<stdio.h> #define MAXSIZE 100 typedef int datatype; ty

資料結構——線性順序表示和實現c語言

PS:資料結構(C語言版)——清華大學出版社, 2.1節程式碼實現#include <stdio.h> #include <stdlib.h> #define TRUE 1 #define FALSE 0 #define OK 1 #define E

【資料結構】順序佇列的實現C語言

佇列的基本概念及其描述 佇列是一種特殊的線性表,它的特殊性在於佇列的插入和刪除操作分別在表的兩端進行。 插入的那一端稱為隊尾,刪除的那一端稱為隊首。佇列的插入操作和刪除操作分別稱為進隊和出隊。 先進先出(First In First Out) 順序佇列要掌握以下操作:

【資料結構】順序棧的實現C語言

棧的基本概念及其描述 棧是一種特殊的線性表,規定它的插入運算和刪除運算均線上性表的同一端進行,進行插入操作和刪除操作的那一端稱為棧頂,另一端稱為棧底。 棧的插入操作和刪除操作分別稱為進棧和出棧。 FILO(First In Last Out)後進先出/先進後出 eg

1、鏈之增、刪、查實現C語言

pan 沒有 null [] src ase 找到 調用 strlen 一、功能描述: 可以創建節點並添加到鏈表中、查看鏈表中的所有節點、並可以刪除特定的節點 二、代碼實現 1、主函數main主要實現的是從後臺鍵入不同的字符,執行對應的函數來實現特定的操作代碼如下:

順序棧——9種基本操作和實現C語言

棧是僅限定在表尾進行插入和刪除操作的線性表,九種棧的基本操作;分別是構造 銷燬 清空 棧長 棧頂 插入 刪除 遍歷。下面就是程式碼實現:  //標頭檔案 #include<stdio.h> #include<string.h> #include&l

演算法4-6:KMP字串模式匹配演算法實現 c語言

[提交] [統計] [提問] 題目描述 KMP演算法是字串模式匹配演算法中較為高效的演算法之一,其在某次子串匹配母串失敗時並未回溯母串的指標而是將子串的指標移動到相應的位置。嚴蔚敏老師的書中詳細描述了KMP演算法,同時前面的例子中也描述了子串移動位置的陣列實現的演算法。前面你已經實現

【資料結構】鏈式棧的實現C語言

棧的鏈式儲存稱為鏈式棧,鏈式棧是一種特殊的單鏈表,它的插入和刪除規定在單鏈表的同一端進行。鏈式棧的棧頂指標一般用top表示。(個人理解:相當於只對單鏈表的第一個結點進行操作) 鏈式棧要掌握以下基本操作: 1、建立一個空鏈式棧 2、判斷鏈式棧是否為空 3、讀鏈式棧的

二叉查詢樹的查詢、插入、刪除、釋放等基本操作的實現C語言

二叉查詢樹是一種特殊性質的二叉樹,該樹中的任何一個節點,它的左子樹(若存在)的元素值小於節點的元素值,右子樹(若存在)的元素值大於節點的元素值。 實現了二叉樹查詢樹的實現以及基本操作,包括查詢、插入、刪除、初始化、釋放等。 原始碼下載地址:http://download.c

資料結構及演算法——單鏈逆轉C語言不間斷更新

題目來源:浙大程式設計類實驗輔助教學平臺 本題要求實現一個函式,將給定的單鏈表逆轉。 函式介面定義: List Reverse( List L ); 其中List結構定義如下: typedef struct Node *PtrToNode; stru

資料結構之串的基本操作的實現c語言

我們先一起來看串的一些概念… 字串(簡稱串),可以將其看作是種特殊的線性表,其特殊性在於線性表的資料元素的型別總是字元性,字串的資料物件約束為字符集。 串是由0個或多個字元組成的有限序列。一般記作:s = “s1 s2 s3 …. sn”,,其中,s是串名

線索二叉樹的實現C語言

概念 鑑於普通二叉樹使用過程中會出現空間的浪費,後人對在在二叉樹的的基礎上做了改進,利用它的空指標域存放在某種遍歷次序下指向它的前驅結點,和後繼結點的指標。這些指標稱為線索,相應的二叉樹就成了線索二叉樹。 結點結構 Ltag為0時指向該結點的左孩子,

斐波那契數列的迭代實現與遞迴實現c語言

遞迴實現 #include<stdio.h> int Fib(int n){ // 自定義函式 if(n<0) return -1; else if(n==0) return 0; else if(n==1)

二叉樹插入和刪除操作的遞迴實現c語言

連結串列和陣列是最常見的資料結構,對於資料結構來說,查詢(Find),最大最小值(FindMin,FindMax),插入(Insert)和刪除(Delete)操作是最基本的操作。對於連結串列和陣列來說,這些操作的時間界為O(N),其中N為元素的個數。陣列的插入和刪除需要對其他

佇列的連結串列實現C語言

利用C語言實現一個簡單的有簡單功能的佇列(只有輸入輸出用的C++),其中對指標的除錯還是比較麻煩,這裡總結一些關於segmentation faults(段錯誤)的常見錯誤: <1>定義了

鏈棧的基本操作實現c語言

#include<stdio.h> #include<stdlib.h> typedef int ElemType; typedef struct linknode {

資料結構—樹的實現C語言

1、樹的概念    樹形結構是節點之間以及分支關係定義的層次結構。作為一種重要的非線性結構,樹形結構中一個節點最多隻有一個前驅節點,但是可以有多個後繼節點。2、樹的儲存結構    在計算機中,樹有多種的儲存方式,下面介紹一種動態的“左子/右兄”二叉連結串列表示方法。#incl