C語言 與 在操作線性表的作用詳解

2022-09-21 22:00:18 字數 1500 閱讀 4893

在資料結構線性表一章,對線性表有這些操作方法(operation):

/*operation*/

initlist(*l);/*初始化操作,建立乙個空的線性表l*/

listempty(l);/*判斷線性表是否為空表,若線性表為空,返回值為true,否則返回false*/

clearlist(*l);/*將線性表清空*/

getelem(l,i,*e);/*性表l中的第i個位置元素值返回給e*/

locateelem(l,e);/***性表l中查詢與給定值e相等的元素,如果查詢成功,返回該元素在表中序號;否則,返回0表示失敗*/

listinsert(*l,i,e);/*在第i個位置插入元素e*/

listdelete(*l,i,*e);/*刪除i個位置元素,並用e返回其值*/

listlength(l);/*返回線性表l的元素個數*/

我們sufexfy大致可以將上述函式分為兩類,一類引數列表中沒有*,例如:listempty(l);

另一類在l或者e前面有個(*)號,究竟是為什麼呢?

我們可以從下面這些**得到啟發

#include

#include

void test1(int a,int b)

int main()

執行結果如下,可見test1中a,b作為形參互相交換值對main函式中的實參並沒有影響

2112 

process returned 0 (0x0)   execution time : 0.118 s

press any key to continue.

讓我們對上述**稍作改動來觀察結果

#include

#include

void test1(int *a,int *b)

int main()

6422000

642200821

process returned 0 (0x0)   execution time : 0.033 s

press any key to continue.

很顯然,此次的test1()方法對main函式的實參總算有了影響,因為現在的test()方法是直接對位址為6422000與6422008儲存單元資料域的修改。

我們繼續回到對線性表操作上來,就會恍然大悟。例如:listins程式設計客棧ert(*l,i,e),倘若不加*,那麼l就永遠作為乙個區域性變數留在了函式:listinsert(l,i,e)中,沒法發生實際的改變。加了*才能保證l被帶出來。我們只需要在方法定義時給形參加上'*',在方法呼叫時給形參加上'&'就能獲得預期的效果

思考:另一種解決思路:是不是可以定義一種list insert()方法,使得返回值為已經修改好的鍊錶l呢?

list i l,int i,elememttype e)

不過這也有個弊病,當插入發生在表頭時,l就必須要指向新的節點,否則位址仍指向的是原來 的表頭結點。解決方法也有,就是在鍊錶第乙個節點a前再插乙個無意義的頭節點b,這樣每次想要在表頭插入元素時只需插在a,b之間即可。

線性表操作(C語言)

題目描述 順序表是我們資料結構中的基本儲存形式,現在給定乙個順序表,有如下操作 insert x y 在順序表中x位置插入y元素,遍歷輸出當前順序表的所有元素。delete x 刪除順序表中的x元素,如果有多個x元素,只刪除第乙個x,遍歷輸出當前順序的所有元素。locate x 輸出順序表中x元素的...

線性表操作集(c語言)

typedef int position typedef struct lnode list struct lnode 初始化 list makeempty 查詢 define error 1 position find list l,elementtype x 插入 bool insert lis...

C語言線性表

include include include 定義乙個linearlist結構體 typedef struct linearlist linearlist 初始化線性表 param 無 return linearlist linearlist initlinearlist return ptr 插...