C語言鏈表完整操作演示
更新時(shí)間:2018年05月22日 08:39:34 作者:chulijun3107
這篇文章主要為大家詳細(xì)介紹了C語言鏈表的完整操作演示,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
本文實(shí)例為大家分享了C鏈表操作演示的具體代碼,供大家參考,具體內(nèi)容如下
頭文件:link_0505.h
/*
鏈表演示
*/
#ifndef __LINK_0505
#define __LINK_0505
typedef struct node{
int num;
struct node* p_next;
}node;
typedef struct
{
node head,tail;
}link;
//鏈表的初始化函數(shù)
void link_init(link *);
//鏈表的清理函數(shù)
void link_deinit(link *);
//判斷鏈表是否空的函數(shù)
int link_empty(link *);
//判斷鏈表是否滿的函數(shù)
int link_full(link *);
//統(tǒng)計(jì)有效數(shù)字個(gè)數(shù)的函數(shù)
int link_size(link *);
//在最前邊插入數(shù)字的函數(shù)
int link_add_head(link *, int );
//在最后邊插入新的數(shù)字的函數(shù)
int link_append(link *, int );
//把數(shù)字按照順序插入到鏈表的函數(shù)
int link_insert(link *, int);
//刪除最前面數(shù)字的函數(shù)
int link_remove_head(link *);
//刪除最后一個(gè)有效數(shù)字
int link_remove_tail(link *);
//刪除某個(gè)給定數(shù)字的函數(shù)
int link_remove(link *, int );
//獲得第一個(gè)有效數(shù)字的函數(shù)
int link_get_head(link *, int *);
//獲得最后一個(gè)有效數(shù)字的函數(shù)
int link_get_tail(link *, int *);
//獲得指定編號數(shù)字的函數(shù)
int link_get(link *, int *, int );
#endif
實(shí)現(xiàn)代碼: link_0505.cpp
/*
鏈表演示
*/
#include "stdlib.h"
#include "link_0505.h"
//鏈表的初始化函數(shù)
void link_init(link *p_link)
{
p_link->head.p_next = &(p_link->tail);
}
//鏈表的清理函數(shù)
void link_deinit(link *p_link)
{
while(p_link->head.p_next != &(p_link->tail))
{
node *p_first = &(p_link->head);
node *p_mid = p_first->p_next;
node *p_last = p_mid->p_next;
p_first->p_next = p_last;
free(p_mid);
p_mid = NULL;
}
}
//判斷鏈表是否空的函數(shù)
int link_empty(link *p_link)
{
return p_link->head.p_next == &(p_link->tail);
}
//判斷鏈表是否滿的函數(shù)
int link_full(link *p_link)
{
return 0;
}
//統(tǒng)計(jì)有效數(shù)字個(gè)數(shù)的函數(shù)
int link_size(link *p_link)
{
int cnt = 0;
node *p_node = NULL;
for (p_node = &(p_link->head);p_node != &(p_link->tail);p_node = p_node->p_next)
{
node *p_first = p_node;
node *p_mid = p_first->p_next;
node *p_last = p_mid->p_next;
if (p_mid != &(p_link->tail))
{
cnt++;
}
}
return cnt;
}
//在最前邊插入數(shù)字的函數(shù)
int link_add_head(link *p_link, int num)
{
node *p_temp = (node *)malloc(sizeof(node));
if (!p_temp)
{
return 0;
}
p_temp->num = num;
node *p_first = &(p_link->head);
node *p_mid = p_first->p_next;
node *p_last = p_mid->p_next;
p_first->p_next = p_temp;
p_temp->p_next = p_mid;
return 1;
}
//在最后邊插入新的數(shù)字的函數(shù)
int link_append(link *p_link, int num)
{
node *p_tmp = (node *)malloc(sizeof(node));
node *p_node = NULL;
if (!p_tmp)
{
return 0;
}
p_tmp->num = num;
for (p_node = &(p_link->head);p_node != &(p_link->tail);p_node = p_node->p_next)
{
node *p_first = p_node;
node *p_mid = p_first->p_next;
node *p_last = p_mid->p_next;
if (p_mid == &(p_link->tail))
{
p_first->p_next = p_tmp;
p_tmp->p_next = p_mid;
break;
}
}
return 1;
}
//把數(shù)字按照順序插入到鏈表的函數(shù)
int link_insert(link *p_link, int num)
{
node* p_temp = (node *)malloc(sizeof(node));
node* p_node = NULL;
if (!p_temp)
{
return 0;
}
p_temp->num = num;
p_temp->p_next = NULL;
for (p_node = &(p_link->head);p_node != &(p_link->tail);p_node = p_node->p_next)
{
node *p_first = p_node;
node *p_mid = p_first->p_next;
node *p_last = p_mid->p_next;
if (p_mid == &(p_link->tail) || p_mid->num > p_temp->num)
{
p_first->p_next = p_temp;
p_temp->p_next = p_mid;
break;
}
}
return 0;
}
//刪除最前面數(shù)字的函數(shù)
int link_remove_head(link *p_link)
{
node *p_first = &(p_link->head);
node *p_mid = p_first->p_next;
node *p_last = p_mid->p_next;
if (p_link->head.p_next == &(p_link->tail))
{
return 0;
}
p_first->p_next = p_last;
free(p_mid);
p_mid = NULL;
}
//刪除最后一個(gè)有效數(shù)字
int link_remove_tail(link *p_link)
{
node *p_node = NULL;
for (p_node = &(p_link->head);p_node !=&(p_link->tail);p_node = p_node->p_next)
{
node *p_first = p_node;
node *p_mid = p_first->p_next;
node *p_last = p_mid->p_next;
if (p_last == &(p_link->tail))
{
p_first->p_next = p_last;
free(p_mid);
p_mid = NULL;
return 1;
}
}
return 0;
}
//刪除某個(gè)給定數(shù)字的函數(shù)
int link_remove(link *p_link, int num)
{
node *p_node = NULL;
for (p_node = &(p_link->head);p_node != &(p_link->tail);p_node = p_node->p_next)
{
node *p_first = p_node;
node *p_mid = p_first->p_next;
node *p_last = p_mid->p_next;
if (p_mid != &(p_link->tail) && p_mid->num == num)
{
p_first->p_next = p_last;
free(p_mid);
p_mid = NULL;
return 1;
}
}
return 0;
}
//獲得第一個(gè)有效數(shù)字的函數(shù)
int link_get_head(link *p_link, int *p_num)
{
if (p_link->head.p_next == &(p_link->tail))
{
return 0;
}
node *p_first = &(p_link->head);
node *p_mid = p_first->p_next;
node *p_last = p_mid->p_next;
p_first->p_next = p_last;
*p_num = p_mid->num;
return 1;
}
//獲得最后一個(gè)有效數(shù)字的函數(shù)
int link_get_tail(link *p_link, int *p_num)
{
node *p_node = NULL;
for (p_node = &(p_link->head);p_node != &(p_link->tail);p_node = p_node->p_next)
{
node *p_first = p_node;
node *p_mid = p_first->p_next;
node *p_last = p_mid->p_next;
if (p_last == &(p_link->tail))
{
*p_num = p_mid->num;
return 1;
}
}
return 0;
}
//獲得指定編號數(shù)字的函數(shù)
int link_get(link *p_link, int *p_num, int num)
{
int cnt = 0;
node *p_node = NULL;
for (p_node = &(p_link->head);p_node != &(p_link->tail);p_node = p_node->p_next)
{
node *p_first = p_node;
node *p_mid = p_first->p_next;
node *p_last = p_mid->p_next;
if (p_mid != &(p_link->tail) && cnt == num)
{
*p_num = p_mid->num;
return 1;
}
cnt++;
}
return 0;
}
測試函數(shù):
/*
* 鏈表測試
* */
#include <stdio.h>
#include "link_0505.h"
int main() {
int size = 0, num = 0, val = 0;
link lnk = {0};
link_init(&lnk);
link_add_head(&lnk, 30);
link_add_head(&lnk, 20);
link_append(&lnk, 90);
link_append(&lnk, 100);
link_insert(&lnk, 50);
link_insert(&lnk, 60);
link_insert(&lnk, 40);
link_insert(&lnk, 80);
link_insert(&lnk, 70);
size = link_size(&lnk);
for (num = 0;num <= size - 1;num++) {
link_get(&lnk, &val, num);
printf("%d ", val);
}
printf("\n");
printf("------------------");
link_remove_head(&lnk);
link_remove_tail(&lnk);
link_remove(&lnk, 70);
size = link_size(&lnk);
for (num = 0;num <= size - 1;num++) {
link_get(&lnk, &val, num);
printf("%d ", val);
}
printf("\n");
link_get_head(&lnk, &val);
printf("最前面的數(shù)字是%d\n", val);
link_get_tail(&lnk, &val);
printf("最后面的數(shù)字是%d\n", val);
link_deinit(&lnk);
return 0;
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
您可能感興趣的文章:
- C語言?超詳細(xì)模擬實(shí)現(xiàn)單鏈表的基本操作建議收藏
- C語言 數(shù)據(jù)結(jié)構(gòu)鏈表的實(shí)例(十九種操作)
- C語言數(shù)據(jù)結(jié)構(gòu) 雙向鏈表的建立與基本操作
- C語言實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)和雙向鏈表操作
- C語言創(chuàng)建和操作單鏈表數(shù)據(jù)結(jié)構(gòu)的實(shí)例教程
- C語言實(shí)現(xiàn)帶頭結(jié)點(diǎn)的鏈表的創(chuàng)建、查找、插入、刪除操作
- C語言單鏈表常見操作匯總
- C語言一篇精通鏈表的各種操作
相關(guān)文章
C++實(shí)現(xiàn)數(shù)據(jù)文件存儲(chǔ)與加載
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)數(shù)據(jù)文件存儲(chǔ)與加載,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-06-06
C++利用容器查找重復(fù)列功能實(shí)現(xiàn)
本文將詳細(xì)介紹c++容器簡介,c++容器的比較 與操作實(shí)例,需要了解更多的朋友可以參考下2012-11-11
C#使用反射加載多個(gè)程序集的實(shí)現(xiàn)方法
下面小編就為大家?guī)硪黄狢#使用反射加載多個(gè)程序集的實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-06-06

