線性表的基本操作c語言實現

時間 2021-09-20 20:35:28

1樓:半清醒丶不言語

**如下:

標頭檔案:

2_1.h

#ifndef  _2_1_h

#define  _2_1_h

typedef void seqlist;

typedef void seqlistnode;

//建立線性表

seqlist * seqlist_create(int capacity);

//銷燬線性表

void seqlist_destroy(seqlist * list);

void seqlist_clear(seqlist* list);

int seqlist_length(seqlist* list);

int seqlist_capacity(seqlist* list);

int seqlist_insert(seqlist* list, seqlistnode* node, int pos);

seqlistnode* seqlist_get(seqlist* list, int pos);

seqlistnode* seqlist_delete(seqlist* list, int pos);

#endif

原始檔:

// 順序線性表.cpp : 定義控制檯應用程式的入口點。

#include "stdafx.h"

#include

#include

#include "2_1.h"

typedef unsigned int tseqlistnode;

typedef struct tseqlist;

int main()

seqlist* list = seqlist_create(5);//建立線性表

int i = 6;//賦值6個變數,已超過線性表最大值 5

int j = 1;

int k = 2;

int x = 3;

int y = 4;

int z = 5;

int index = 0;

將這6個變數插入線性表中

seqlist_insert(list, &j, 0);

seqlist_insert(list, &k, 0);

seqlist_insert(list, &x, 0);

seqlist_insert(list, &y, 0);

seqlist_insert(list, &z, 0);

//遍歷

for(index=0; indexint* p = (int*)seqlist_get(list, index);

printf("%d  ", *p);

printf("\n");

//刪除操作

while( seqlist_length(list) > 0 )

int* p = (int*)seqlist_delete(list, 0);

printf("刪除了: %d\n", *p);

seqlist_clear(list);

seqlist_destroy(list);

system("pause");

return 0;

//建立線性表

seqlist * seqlist_create(int capacity)

tseqlist* ret = null ;

if(capacity >= 0)

ret = (tseqlist*)malloc(sizeof(tseqlist) + sizeof(tseqlistnode)*capacity);  //為線性表分配空間,包含結 //構體和節點的總大小

if(null != ret)

ret->len = 0;

ret->capacity = capacity;

ret->node = (tseqlistnode*)(ret + 1);//將節點指向上述分配到的空間的後部分

return ret;

//銷燬

void seqlist_destroy(seqlist * list)

free(list);

//清空

void seqlist_clear(seqlist* list)

tseqlist * ret = (tseqlist*)list;

if(null != ret)

ret->len = 0;

//獲得線性表的長度

int seqlist_length(seqlist* list)

tseqlist * ret = (tseqlist*)list;

int len = -1;

if(null != ret)

len = ret->len;

return len;

//線性表的總長度

int seqlist_capacity(seqlist* list)

tseqlist * ret = (tseqlist*)list;

int capacity = -1;

if(null != ret)

ret->capacity = capacity;

return capacity;

//插入

int seqlist_insert(seqlist* list, seqlistnode* node, int pos)

tseqlist * slist = (tseqlist*)list;

int i,ret = -1;

if((slist != null) &&(pos >= 0) && slist->capacity >= slist->len+1)

if(pos >= slist->len)

pos = slist->len;

for(i = slist->len; i > pos; i--)

slist->node[i] = slist->node[i-1];

slist->node[i] = (tseqlistnode)node;

++slist->len;

ret = 1;

return ret;

//獲得指定位置的節點

seqlistnode* seqlist_get(seqlist* list, int pos)

tseqlist * slist = (tseqlist*)list;

tseqlistnode* node = null;

if(null != slist && pos>=0 && pos < slist->len)

node = (tseqlistnode*)slist->node[pos];

return node;

//刪除

seqlistnode* seqlist_delete(seqlist* list, int pos)

tseqlist * slist = (tseqlist*)list;

seqlistnode * node = seqlist_get( list, pos);

int i;

if(slist != null && pos >= 0 && pos< slist->len)

for( i=pos+1; ilen; i++)

slist->node[i-1] = slist->node[i];

slist->len--;

return node;

演示:資料拓展:

線性表是最基本、最簡單、也是最常用的一種資料結構。

線性表中資料元素之間的關係是一對一的關係,即除了第一個和最後一個資料元素之外,其它資料元素都是首尾相接的(注意,這句話只適用大部分線性表,而不是全部。比如,迴圈連結串列邏輯層次上也是一種線性表(儲存層次上屬於鏈式儲存),但是把最後一個資料元素的尾指標指向了首位結點)。

我們說「線性」和「非線性」,只在邏輯層次上討論,而不考慮儲存層次,所以雙向連結串列和迴圈連結串列依舊是線性表。

在資料結構邏輯層次上細分,線性表可分為一般線性表和受限線性表。一般線性表也就是我們通常所說的「線性表」,可以自由的刪除或新增結點。受限線性表主要包括棧和佇列,受限表示對結點的操作受限制。

線性表的邏輯結構簡單,便於實現和操作。因此,線性表這種資料結構在實際應用中是廣泛採用的一種資料結構。

2樓:匿名使用者

譚浩強的c語言教程上面有完整的程式

3樓:魔尊

#include"stdio.h"

#include

typedef char elemtype;

typedef struct lnode

linklist;

頭插法建表

尾插法建表

r->next=null;

初始化線性表

銷燬線性表

free(p);

}int listempty(linklist *l) //判斷線性表是否為空

int listlength(linklist *l) //求線性表的長度

return(n);

}void displist(linklist *l) //輸出線性表

求線性表中某個資料元素值

if(p==null)

return 0;

else

}int locateelem(linklist *l,elemtype e) //按元素值查詢

if(p==null)return(0);

else return(i);

插入資料元素

if(p==null)return 0;

else

刪除資料元素

if(p==null)

return 0;

else

}int main()

;linklist *h;

initlist(h); //初始化順序表h

依次採用尾插入法插入a,b,c,d,e元素

printf("單連結串列為:");

displist(h); printf("\n"); //輸出順序表h

printf("該單連結串列的長度為:");

printf("%d",listlength(h)); printf("\n"); //輸出順序表h的長度

if(listempty(h)) printf("該單連結串列為空。\n");

else printf("該單連結串列不為空。\n"); //判斷順序表h是否為空

getelem(h,3,e);printf("該單連結串列的第3個元素為:");

printf("%c",e); printf("\n"); //輸出順序表h的第3個元素

printf("該單連結串列中a的位置為:");

printf("%d",locateelem(h,'a')); printf("\n"); //輸出元素'a'的位置

listinsert(h,4,'f'); //在第4個元素位置插入'f'素

printf("在第4 個元素位置上插入'f'後單連結串列為:");

displist(h); printf("\n"); //輸出順序表h

listdelete(h,3,e); //刪除l的第3個元素

printf("刪除第3個元素後單連結串列為:");

displist(h); printf("\n"); //輸出順序表h

destroylist(h); //釋放順序表h

return 0;

}這個是我以前做的作業,不知道可以不?

線性表的順序儲存結構用C 實現

線性表的順序儲存結構用c 實現 include pch.h include include define data int typedef int data struct snode snode g phead null void addhead data data void print print...

資料結構C語言版,順序線性表的合併程式。最好有註釋

防禦 希望我的回答對你的學習有幫助 include 順序表儲存空間長度的最小值 define listminsize 10 順序表儲存結構型別定義 typedef struct seqlist 順序表初始化 void listinitialize seqlist pl,int size 按給定的下標...

c語言 實現1到10的平方之和

方法一 使用函式。main fun int k 結果 1,4,9,100 方法二 使用巨集。define fun a a a main 分析 預處理程式將程式中帶實參的fun替換成 k k 由於c語言中,實參的求值順序是從右向左,因此程式執行結果為 第一次迴圈 k k 為 2 1第二次迴圈 k k ...