當前位置:首頁 » 編程語言 » c語言雙鏈表的抽象數據類型
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言雙鏈表的抽象數據類型

發布時間: 2022-08-04 03:12:17

c語言雙向鏈表

#include "stdio.h"
#include "stdlib.h"
typedef int ElemType;//元素類型
typedef struct DuLNode
{//雙向鏈表
ElemType data;
struct DuLNode *prior, *next;
}DuLNode,*DuLinkList;
int Create(DuLinkList &L)
{//建立雙向鏈表
DuLinkList p,q;
ElemType n,i;
L = (DuLinkList) malloc (sizeof(DuLNode));
L->next = NULL;
q = L;
printf("輸入數據個數:");
scanf("%d",&n);
printf("輸入數據元素:");
for ( i = 0; i < n; i++)
{
p = (DuLinkList) malloc (sizeof(DuLNode));
scanf("%d",&p->data);//插入數據
p->prior = q;
q->next = p;
p->next = 0;
q = q->next;
}
return 1;
}
int Visit(DuLinkList &L)
{//遍歷雙向鏈表
DuLinkList p;
p = L->next;
printf("雙向鏈表為:");
while (p)
{
printf("%4d",p->data);
p = p->next;
}
printf("\n");
return 1;
}
int Clear(DuLinkList &L)
{
DuLinkList p;
p = L->next;
while(p)
{
L->next = p->next;
free(p);
p = L->next;
}
return 1;
}
main()
{
int i,e,s,num;
char c='y';
DuLinkList L;
Create(L);
Visit(L);
while (c=='y')
{
printf("\n\n\n1.雙向鏈表插入元素\n2.雙向鏈表中刪除元素\n");
printf("3.判斷雙向鏈表元素是否對稱\n");
printf("4.雙向鏈表中奇數排在偶數前面\n");
printf("5.建立遞增鏈表並有序插入元素\n\n");
printf("選擇需要的操作\n\n");
scanf("%d",&num);
switch(num)
{
case 1:
printf("輸入插入元素位置以及元素:\n");
scanf("%d%d",&i,&e);
ListInsert(L, i, e);
Visit(L);
break;
case 2:
printf("輸入刪除元素位置:");
scanf("%d",&i);
Delete(L,i,s);
printf("刪除的元素為:%d\n",s);
Visit(L);
break;
case 3:
if(Same(L)) printf("鏈表對稱\n");
else printf("鏈表不對稱\n");
break;
case 5:
printf("清空原鏈表,建立遞增鏈表:\n");
XCreate(L);
Visit(L);
break;
case 4:
printf("奇數放在偶數前面:\n");
Jiou(L);
Visit(L);
break;
}
printf("繼續操作(y/n):\n");
scanf("%s",&c);
}
}

❷ C語言定義雙向鏈表結構體

struct node
{
DataType data;
node * prior;
node * next;
};
其中prior指針用來存儲前一節點的地址,next用來存儲後一節點的地址,就比單項鏈表多了一個指針而已,可以添加其它自定義的數據成員

❸ c語言數據結構(雙向鏈表排序)

#include<stdio.h>
#include<malloc.h>

#define ElemType int

int count=0;

typedef struct DulNode
{
ElemType data;
DulNode *prior;
DulNode *next;
}DulNode,*DulLinkList;

//初始化鏈表,結束後產生一個頭結點指針
void InitDLList(DulLinkList *L)
{
(*L)=(DulLinkList)malloc(sizeof(DulNode));
(*L)->next=*L;
(*L)->prior=(*L)->next;
}
//對鏈表進行插入操作
void ListInsert(DulLinkList *L)
{
int i=0,n;
ElemType temp;
DulNode *s,*p;
p=(*L)->next;
printf("請輸入插入元素數量:\n");
scanf("%d",&n);
count=n;
printf("請輸入%d個自然數\n",n);
while(i<n)
{
scanf("%d",&temp);
s=(DulNode*)malloc(sizeof(DulNode));
s->data=temp;
while((p!=(*L))&&(p->data<temp))//查找所要插入的位置
{
p=p->next;
}

s->prior=p->prior;//新節點的插入
s->next=p;
p->prior->next=s;
p->prior=s;

p=(*L)->next;//將指針回指到鏈表第一個非空節點,主要是為了下次查找插入位置
i++;
}
}
void Display(DulLinkList L)
{
DulNode *p;
p=L->next;
printf("雙向鏈表中的數據為:\n");
while(p!=L)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
void Sort(DulLinkList *L)
{
ElemType temp;
DulNode *p,*q;
p=(*L)->next;
q=(*L)->prior;
if(count%2!=0)
q=q->prior;
p=p->next;

while(p!=q)
{
temp=p->data;
p->data=q->data;
q->data=temp;

p=p->next;

if(p!=q) //第二題只需交換節點數據
q=q->prior;//這幾個if else語句需要仔細
else
break;
if(p!=q)
p=p->next;
else
break;
if(p!=q)
q=q->prior;
else
break;
}

}
void main()
{
DulLinkList L;
InitDLList(&L);//初始化鏈表
ListInsert(&L);//順序插入數據
Display(L);//顯示結果
Sort(&L);//第二題操作
Display(L);//第二題輸出結果
}

❹ 從C語言的角度來解釋什麼是抽象數據類型

簡單的說一下吧,所謂抽象數據類型ADT,是指 我們在邏輯上定義的 一種 數據類型。

如你所知道的,計算機內,無論是內存還是外存,都只是一組二進制的數位而已。

大多數時候,比如我們所熟知的 Char類型、Int類型等等,都是一組已經定義好的二進制數位。

所謂定義好,是指,在這一組數位中,如Char類型,8位,即一組8個二進制數位,我們如何標識和處理每一位,以及解讀每一位所代表的意義。

你學過C,應該知道ASCII碼,和二進制計數。 Char的這個數據類型的含義就是說 以二進制計數 算出對應的數值, 再以ASCII碼為標准,解讀出這8位二進制位中所表示的字母。

事實上,我想說的是,這就是一個基本的抽象數據類型了。

當然,ADT不僅僅是一組數位的定義,他還包括一組定義在這個結構上的一組操作。

struct這個方法,在後來的演變中,成為了C++和其他高等語言中的類(class)。

我知道,這樣講你肯定不是很明白,但關於這個東西,有一門課程叫做《數據結構》,中間詳細敘述了所有有關 抽象數據類型的概念 。

其中,有一本 《數據結構C語言版》清華大學出版社 嚴蔚敏著 的教材,是所有計算機專業學生必修的一門課程。你可以看看。

祝好運!

如果對您有幫助,請記得採納為滿意答案,謝謝!祝您生活愉快!

❺ C語言中,雙鏈表、單鏈表、順序表有什麼區別分別有什麼用途簡單來說,就是這三個表分別適用於什麼情

鏈表是通過指針連接的表吧 就是在內存中不是連續的 單鏈表每一個節點包含一個數據和一個指向下一個節點的指針 雙鏈表比單鏈表多一個指向上一個節點的指針 就是說單鏈表只能沿著一個方向走 雙鏈表可以沿任意方向走 順序表應該是在內存中順序存儲的表吧

❻ 抽象數據類型與C語言!!怎麼感覺《數據結構(C語言)》中鏈表等的操作比C語言的還要麻煩

以後工作什麼的我就不知道了 但是我跟別人去過面試 裡面很多題目都是數據結構的
自我感覺數據結構其實就是定義自己的需要的數據類型,因為在現在中基本的數據類型不夠用,鏈表的操作主要是別讓數據的指針丟失不然你的數據就找不到了。反正個人認為挺重要的基礎東西,努力學吧 多拿書上的代碼抄幾遍,有人說代碼百遍其義自現
我也菜鳥沒辦法解釋的更好

❼ C語言雙鏈表,定義一個結構體指針變數

首先,你要明白
p的類型
DLinklist
*
p;
指針p指向的類型是DLinklist
他存放的是這個指向這個
結構體
的地址
p->next->next
是指向下一個節點!

❽ c語言抽象數據類型的插入、刪除問題

完全可以。但是抽象,一般不這么用。這樣就和鏈表差不多了

❾ c語言什麼單向鏈表,什麼是雙向鏈表

單向就是, 只可以從頭到尾按指針向一個方向遍歷,不可以返過來。
雙向就是,任何時候,從前往後,還是從後往前都可以遍歷,兩個方向都有指針
雙向循環, 就是一個鏈表頭尾相連,指針也是雙方向的,可以從頭遍歷到尾,再回到頭,或者從尾到頭遍歷,再回到尾