計算機軟件最基本知識?一、實驗目的了解實現線性表/棧與隊/數組所涉及到的數據結構,今天小編就來說說關于計算機軟件最基本知識?下面更多詳細答案一起來看看吧!

計算機軟件最基本知識
實驗一:線性表/棧與隊一、實驗目的
了解實現線性表/棧與隊/數組所涉及到的數據結構。
二、實驗要求
因受時間限制,從以下給出的4個實驗内容中任選3個,分析并補齊給出的源程序,運行相應的程序,檢驗運行結果,以此鞏固對相應部分的理論知識的理解。
1.複習線性表、棧與隊列的定義,理解順序存儲、鍊式存儲的方法及基本操作。
2.複習C語言中數組、指針及結構體的概念、定義方式。
3.上機前準備好全部源程序。
4.計算機中需要安裝vc6.0或vs2010。
5.程序中所用結構體定義于datastru.h中。
三、實驗内容
熟悉vs2010環境下建立程序源文件與調試程序的流程。
1、完成有序表(順序表)中插入一元素并保證仍然有序。
……(補充程序)
void main( )
{
SEQUENLIST L;
int num,i,k,x;
L.last=0; //置順序表為空,表長為0
printf("請輸入順序表元素,元素為整型量,用空格分開,-99為結束标志:");
/*輸入順序表元素,建立有序表,值從小到大*/
scanf("%d",&num);
while (num !=-99) {
………(補充程序)
L.last ;
scanf("%d",&num);
}
printf("%d",L.last);
printf("輸入要插入的元素值(整型) : ");
scanf("%d",&num);
printf("\n插入前有序表元素列表 :");
for (i=0; i<L.last; i )
printf("M",L.datas[i]);
printf("\n");
k = L.last-1;
while ((k>= 0) && (num<L.datas[k])) /*查找插入位置i */
k--;
for(i=L.last-1; i>=k 1; i--)
L.datas[i 1]=L.datas[i]; /*移動元素 */
L.datas[k 1]=num; /*新元素插入*/
L.last ; /*表長加1 */
printf("\n插入後有序表元素列表 :");
for (i=0; i<L.last; i )
printf("M",L.datas[i]);
printf("\n");
}
2、完成鍊表的結點插入、删除操作,并顯示操作前後的線性表中各元素的情況。
……(補充程序)
void inser_order(DATATYPE2 x, LINKLIST *head){
LINKLIST *pr, *pn, *pp;
pr = head; pn = head->next;
while(pn != NULL && pn->data < x)
{
……(補充程序)
}
pp = (LINKLIST *)malloc(sizeof(LINKLIST));
……(補充程序)
}
int count_head(LINKLIST *head) /*輸出單鍊表元素值并計數*/
{
int i = 0;
LINKLIST *p;
p = head->next;
printf("輸出單鍊表元素值 : ");
while(p != NULL)
{
……(補充程序)
}
printf("\n");
return i;
}
LINKLIST *creatlink_order_head(LINKLIST *head) /*建立帶頭結點的有序單鍊表*/
{
LINKLIST *t, *p, *q;
char ch;
t = (LINKLIST *)malloc(sizeof(LINKLIST)); //建立帶頭結點的空鍊表
t->next = NULL;
head = t;
printf("單鍊表元素值為單個字符, 連續輸入,#為結束字符 : ");
while ((ch = getchar()) != '#')
{
……(補充程序)
}
return head;
}
int main()
{
LINKLIST *head = NULL;
int num;
char ch;
printf("\n 建立單鍊表\n\n");
head = creatlink_order_head(head);
num = count_head(head);
printf("單鍊表元素個數 = %d\n", num);
fflush(stdin);
printf("\n輸入插入元素值 : ");
ch = getchar();
inser_order(ch, head);
printf("\n 元素插入後\n\n");
num = count_head(head);
printf("插入後單鍊表元素個數 = %d\n", num);
return 1;
}
3、運用棧完成十進制數與八進制數的轉換。
……(補充程序)
void initstack(SEQSTACK *s) /*順序棧初始化*/
{
……(補充程序)
}
DATATYPE1 gettop(SEQSTACK *s) /*返回棧頂元素*/
{
DATATYPE1 x;
……(補充程序)
return x;
}
int push(SEQSTACK *s, DATATYPE1 x) /*元素x入棧*/
{
if(s->top == MAXSIZE-1)
{
……(補充程序)
}
else
{
……(補充程序)
return 1;
}
}
DATATYPE1 pop(SEQSTACK *s) /*返回棧頂元素并删除棧頂元素*/
{
DATATYPE1 x;
if(s->top == 0)
{
printf("棧空\n");
x=0;
}
else
{
……(補充程序)
}
return x;
}
int main( )
{
SEQSTACK stack, *s;
int n;
s = &stack;
initstack(s);
n = 0;
printf("輸入一非負整數(十進制) :");
scanf("%d",&n);
push(s,'#');
while(n != 0)
{
push(s, n % 8); /* %為求餘數運算符, 餘數入棧*/
n = n / 8; /* /為求整數商運算符,商不為零,繼續運行*/
}
printf("\n\n對應的八進制數為 :");
while(gettop(s) != '#')
printf("%d",pop(s));
printf("\n");
return 1;
}
4、實現帶頭結點鍊隊元素的删除、插入操作,并顯示操作前後的隊列情況。
……(補充程序)
DATATYPE1 dellinkqueue(LINKQUEUE *q) /*删除隊頭元素并返回*/
{
……(補充程序)
if(q->front == q->rear)
{
printf("隊列空\n");
v = 0;
}
else
{
……(補充程序)
}
return v;
}
void enlinkqueue(LINKQUEUE *q, DATATYPE1 x) /*元素x 入隊列*/
{
(q->rear)->next = (LINKQLIST *)malloc(sizeof(LINKQLIST));
……(補充程序)
}
void initlinkqueue(LINKQUEUE *q) /*鍊隊列初始化*/
{
……(補充程序)
}
void outlinkqueue(LINKQUEUE *q) /*鍊隊列元素依次顯示*/
{
LINKQLIST *p;
p = q->front;
printf("隊列元素顯示 : ");
while(p != q->rear)
{
……(補充程序)
}
printf("\n");
}
int main()
{
LINKQUEUE lq, *p;
int j;
p = &lq;
initlinkqueue(p);
printf("輸入一整數(奇數——入隊列、偶數——删除隊頭元素、0——退出) : ");
scanf("%d", &j);
while(j != 0) /*輸入 0——退出*/
{
if(j % 2 == 1)
enlinkqueue(p,j); /*輸入奇數——入隊列*/
else
j = dellinkqueue(p); /*輸入偶數——删除隊頭元素*/
outlinkqueue(p);
printf("\n輸入一整數(奇數——入隊列、偶數——删除隊頭元素、0——退出) : ");
scanf("%d", &j); /*繼續輸入*/
}
return 1;
}
四、注意事項
注意程序中用到的結構體的來源及表示方法、調用方式。讀懂程序結構,先補齊缺失代碼,再調試運行程序。
五、實驗總結和體會
,